Ohhnews

分类导航

$ cd ..
Spring Blog原文

Spring Batch 6.1.0-M2 正式发布

#spring batch#版本发布#依赖升级#mongodb#异步处理

我谨代表团队及所有贡献者,很高兴地宣布 Spring Batch 6.1.0-M2 现已可从 Maven Central 获取!这是第二个里程碑版本,在 6.1.0-M1 的基础上带来了许多新功能、增强以及少量破坏性变更。

本文将带你了解主要变更:

  • 依赖升级
  • MongoDB 作业仓库的集合前缀
  • 基于 DefaultFormattingConversionService 的默认转换服务
  • 异步处理 API 与本地分块移至 spring-batch-core
  • RepositoryItemWriter 中的刷新支持
  • 基于资源的读取器的位置模式
  • 互斥构建器方法的编译期安全
  • 弃用项

完整的变更列表,请查看发布说明。

依赖升级

Spring 依赖升级至以下版本:

  • Spring Framework 7.1.0-M2
  • Spring Integration 7.2.0-M2
  • Spring Data 2026.1.0-M2
  • Spring LDAP 4.2.0-M1
  • Spring AMQP 4.2.0-M2
  • Spring Kafka 4.2.0-M2
  • Micrometer 1.18.0-M2

MongoDB 作业仓库的集合前缀

MongoDB 作业仓库现在支持可配置的集合前缀,类似于 JDBC 作业仓库的表前缀。这使得可以针对同一个 MongoDB 数据库运行多个应用程序,或将不同环境彼此隔离:

$ java
@EnableBatchProcessing
@EnableMongoJobRepository(collectionPrefix = "MY_APP_")
class MyJobConfiguration {
	// 省略作业定义
}

该前缀默认为 BATCH_,因此现有应用程序不受影响。

基于 DefaultFormattingConversionService 的默认转换服务

作业仓库现在基于 Spring Framework 的 DefaultFormattingConversionService 构建其默认转换服务,并通过新的 ConversionServiceFactory 工具类暴露,而不再使用一组手写的转换器。原有的作业参数格式得以保留,同时还能受益于开箱即用的更丰富的转换器和格式化器集合。因此,以前的日期/时间转换器现已弃用,推荐使用 ConversionServiceFactory#createConversionService()。

异步处理 API 与本地分块移至 spring-batch-core

AsyncItemProcessor、AsyncItemWriter 和 ChunkTaskExecutorItemWriter 已从 spring-batch-integration 移至 spring-batch-core 中的 org.springframework.batch.core.step.item 包,因为它们仅依赖 TaskExecutor,并不依赖 Spring Integration。这使得应用程序无需引入 spring-batch-integration 及其传递依赖,即可使用异步项处理和本地分块。spring-batch-integration 中的这些类被保留为已弃用的子类,以保持向后兼容。

RepositoryItemWriter 中的刷新支持

RepositoryItemWriter 现在支持在写入一个分块后刷新底层的 Spring Data 仓库,方式可以是指定一个既保存又刷新的仓库方法(例如 saveAllAndFlush),也可以在子类中重写新的 flush 方法。

基于资源的读取器的位置模式

MultiResourceItemReaderBuilder 现在可以直接接受资源位置模式(例如 "classpath:data/input/file-*.txt"),无需事先解析并注入资源。新的 ResourcesItemReaderBuilder 为 ResourcesItemReader 带来了同样的能力。

互斥构建器方法的编译期安全

少数构建器(FlatFileItemReaderBuilder、FlatFileItemWriterBuilder、JdbcBatchItemWriterBuilder)曾暴露出成对的方法,用于配置互斥的策略,只有在同时调用两者时才会在 build() 阶段失败。这些构建器现在使用分阶段的 DSL,因此无效组合会被编译器直接拒绝。对于将构建器返回值存储在类型为构建器类的变量中的代码来说,这是一个源代码和二进制层面的破坏性变更;而流畅的调用链除了重新编译之外无需任何修改。更多细节请参见问题 #4888。

弃用项

本次发布中有若干 API 被弃用并由其替代方案取代,包括 Apache Derby 支持、旧版日期/时间转换器、StepExecution#getJobExecutionId()/getJobParameters()、JobExecution#getJobInstanceId(),以及 JobRepository/JobExplorer/JobInstanceDao 上一些无法可靠报告未知作业/步骤名称的计数方法。所有这些都计划在 7.0 版本中移除。完整列表请参阅参考文档。

反馈

我要感谢所有参与本次发布的贡献者!随着我们越来越接近 6.1 RC 和 GA 版本,期待你在 Github Issues、Github Discussions 和 X 上提供反馈。


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