Spring Batch 6.0.0-M2 现已发布

版本发布 | Mahmoud Ben Hassine | 2025 年 8 月 20 日 | ...

我很高兴地宣布,Spring Batch 6.0.0-M2 现已从 Maven Central 发布!

在此里程碑版本中,我们发布了以下功能和改进

  • 依赖升级
  • 面向块处理模型的新实现
  • 恢复突然失败的作业执行的能力

有关更改的完整列表,请查看发布说明

依赖升级

在此里程碑版本中,Spring 依赖项已升级到以下版本

  • Spring Framework: 7.0.0-M8
  • Spring Integration: 7.0.0-M2
  • Spring AMQP: 4.0.0-M4
  • Spring Kafka: 4.0.0-M4
  • Spring Data: 4.0.0-M5
  • Spring Ldap: 4.0.0-M2
  • Micrometer: 1.16.0-M2

请注意,此版本兼容 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();
}

此外,容错功能也进行了如下调整

  • 重试功能现在基于 Spring Framework 7 中引入的重试功能,而不是之前的 Spring Retry 库
  • 跳过功能已稍微适应新实现,现在完全基于 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 IssuesGithub DiscussionsX 上提供反馈。


Spring Batch 主页|Github 上的源代码|参考文档

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有