皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Spring Batch 6.0.0-M2发布

Spring Batch 6.0.0-M2发布

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

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

  • 依赖升级
  • 块处理模型的新实现
  • 能够恢复突然失败的任务执行

要查看完整的更改列表,请检查发布说明

Dependencies upgrade  依赖升级

在此次里程碑版本中,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 框架 7 中引入的重试功能,而不是之前的 Spring Retry 库
  • skip 功能已稍作调整,现在完全基于 SkipPolicy 接口实现

以下是一个如何使用新 ChunkOrientedStep 的 retry 和 skip 功能的快速示例:

@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 存储则需要一些自定义语句)。

此里程碑版本引入了名为 recover 的新方法,该方法位于 JobOperator 接口中,可以在所有作业存储库中一致地恢复失败的作业执行。

Feedback  反馈

感谢在本次发布中 起到作用的贡献者们!随着我们继续开发 Spring Batch 6,期待您在 Github Issues、Github DiscussionsX 上的的反馈。


Spring Batch 首页|Source on Github|参考文档
转自 Spring Batch 6.0.0-M2 现已可用 — Spring Batch 6.0.0-M2 available now