领先一步
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 上提供反馈。