領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多我很高興地宣佈,Spring Batch 6.0.0-M2 現已從 Maven Central 釋出!
在此里程碑版本中,我們釋出了以下功能和改進
有關更改的完整列表,請檢視釋出說明。
在此里程碑版本中,Spring 依賴項已升級到以下版本
請注意,此版本相容 Java 17+。
這不是一個新功能,而是面向塊處理模型的全新增強實現。這個新實現作為實驗性新增在 5.1 版本中引入,現在在 6.0 版本中作為穩定功能提供。
新實現位於 ChunkOrientedStep 類中,它替代了 ChunkOrientedTasklet / TaskletStep 類。
下面是如何使用其構建器定義 ChunkOrientedStep 的示例
@Bean
public Step chunkOrientedStep(JobRepository jobRepository, JdbcTransactionManager transactionManager,
ItemReader<Person> itemReader, ItemProcessor<Person, Person> itemProcessor, ItemWriter<Person> itemWriter) {
int chunkSize = 100;
return new ChunkOrientedStepBuilder<Person, Person>(jobRepository, transactionManager, chunkSize)
.reader(itemReader)
.processor(itemProcessor)
.writer(itemWriter)
.build();
}
此外,容錯功能也進行了如下調整
SkipPolicy 介面下面是如何使用新 ChunkOrientedStep 的重試和跳過功能的快速示例
@Bean
public Step faulTolerantChunkOrientedStep(JobRepository jobRepository, JdbcTransactionManager transactionManager,
ItemReader<Person> itemReader, ItemProcessor<Person, Person> itemProcessor, ItemWriter<Person> itemWriter) {
// retry policy configuration
int maxAttempts = 10;
var retrybaleExceptions = Set.of(TransientException.class);
RetryPolicy retryPolicy = RetryPolicy.builder()
.maxAttempts(maxAttempts)
.includes(retrybaleExceptions)
.build();
// skip policy configuration
int skipLimit = 50;
var skippableExceptions = Set.of(FlatFileParseException.class);
SkipPolicy skipPolicy = new LimitCheckingItemSkipPolicy(skipLimit, skippableExceptions);
// step configuration
int chunkSize = 100;
return new ChunkOrientedStepBuilder<Person, Person>(jobRepository, transactionManager, chunkSize)
.reader(itemReader)
.processor(itemProcessor)
.writer(itemWriter)
.faultTolerant()
.retryPolicy(retryPolicy)
.skipPolicy(skipPolicy)
.build();
}
有關如何從舊實現遷移到新實現的更多詳細資訊,請參閱遷移指南。
在 v6 之前,如果作業執行突然失敗,則無法在不手動更新資料庫的情況下恢復它。這容易出錯,並且在不同的作業倉庫中不一致(因為它需要一些用於 JDBC 資料庫的 SQL 語句和一些用於 NoSQL 儲存的自定義語句)。
此里程碑版本在 JobOperator 介面中引入了一個名為 recover 的新方法,允許您在所有作業倉庫中一致地恢復失敗的作業執行。
我要感謝在此版本中發揮作用的所有貢獻者!隨著我們繼續開發 Spring Batch 6,我們期待您在 Github Issues、Github Discussions 和 X 上提供反饋。