Spring Batch 6.0.0-M1 已发布!

版本发布 | Mahmoud Ben Hassine | 2025年7月23日 | ...

我很高兴代表团队和所有贡献者宣布,Spring Batch 6.0.0-M1 现已在 Maven Central 上发布!这个第一个里程碑引入了多项新功能、增强功能和错误修复。它还包括一些 API 破坏性更改和弃用。

这篇博文将引导您了解以下主要更改

  • 依赖升级
  • 批处理基础设施配置改进
  • 新的命令行作业操作员
  • 弃用和精简

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

依赖升级

在此主要版本中,Spring 依赖项已升级到以下版本:

  • Spring Framework 7.0
  • Spring Integration 7.0
  • Spring Data 4.0
  • Spring LDAP 4.0
  • Spring AMQP 4.0
  • Spring Kafka 4.0
  • Micrometer 1.16

请注意,此版本兼容 Java 17 及更高版本。

批处理基础设施配置改进

用于批处理基础设施配置的新注解和类

在 v6 之前,@EnableBatchProcessing 注解与基于 JDBC 的基础设施绑定。现在不再是这样了。引入了两个新注解来配置底层作业仓库:@EnableJdbcJobRepository@EnableMongoJobRepository

从 v6 开始,@EnableBatchProcessing 允许您配置批处理基础设施的通用属性,而特定于存储的属性可以使用新的专用注解来指定。

以下是这些注解的使用示例:

@EnableBatchProcessing(taskExecutorRef = "batchTaskExecutor")
@EnableJdbcJobRepository(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
class MyJobConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("job", jobRepository)
                    // job flow omitted
                    .build();
	}
}

同样,基于 DefaultBatchConfiguration 的编程模型也进行了更新,引入了两个新的配置类来定义特定于存储的属性:JdbcDefaultBatchConfigurationMongoDefaultBatchConfiguration。这些类可用于以编程方式配置每个作业仓库的特定属性以及其他批处理基础设施 Bean。

默认情况下,无资源批处理基础设施

DefaultBatchConfiguration 类已更新,默认提供“无资源”批处理基础设施(基于 v5.2 中引入的 ResourcelessJobRepository 实现)。这意味着它不再需要用于作业仓库的内存数据库(如 H2),而这在以前是批处理元数据存储所必需的。

此外,当不使用元数据时,此更改将提高批处理应用程序的默认性能,因为 ResourcelessJobRepository 不需要任何数据库连接或事务。

最后,此更改将有助于减少批处理应用程序的内存占用,因为不再需要内存数据库来存储元数据。

批处理基础设施配置简化

在 v6 之前,非平凡的 Spring Batch 应用程序的典型配置非常复杂,需要大量 Bean:JobRepositoryJobLauncherJobExplorerJobOperatorJobRegistryJobRegistrySmartInitializingSingleton 等。这需要大量的配置,有时还会出现重复代码,例如需要在 JobRepositoryJobExplorer 上配置相同的执行上下文序列化器。

在此版本中,已对批处理基础设施配置进行了多项更改以进行简化:

  • JobRepository 现在扩展了 JobExplorer 接口,因此无需定义单独的 JobExplorer Bean。
  • JobOperator 现在扩展了 JobLauncher 接口,因此无需定义单独的 JobLauncher Bean。
  • JobRegistry 现在足够智能,可以自动注册作业,因此无需定义单独的 JobRegistrySmartInitializingSingleton Bean 或 JobRegistryBeanPostProcessor

这减少了典型批处理应用程序所需的 Bean 数量,并简化了配置代码。

新的命令行作业操作符

Spring Batch 自版本 1 以来就提供了 CommandLineJobRunner。虽然这个运行器多年来一直很好地服务于其目的,但在可扩展性和定制方面开始暴露出一些限制。已经报告了许多问题,例如静态初始化、处理选项和参数的非标准方式以及缺乏可扩展性。

此外,这些问题使得无法在 Spring Boot 中重用该运行器,导致两个项目中出现重复代码以及行为差异(例如作业参数递增器行为差异),这让许多用户感到困惑。

此版本引入了 CommandLineJobRunner 的现代版本,名为 CommandLineJobOperator,它允许您从命令行操作批处理作业(启动、停止、重启等),并且是可定制、可扩展的,并已更新以适应 Spring Batch 6 中引入的新更改。

废弃和精简

与任何主要版本一样,Spring Batch 6.0 中废弃或删除了一些功能。以下更改值得注意:

  • 所有先前版本中废弃的 API 和功能均已删除
  • 通过 @EnableBatchProcessing(modular = true) 进行的模块化配置已被废弃
  • 此版本中废弃了一些 API,以简化核心 API 并缩小其范围

有关这些更改的更多详细信息,请参阅迁移指南

反馈

我要感谢在此版本中发挥作用的所有贡献者!随着我们继续开发 Spring Batch 6,我们期待您在 Github IssuesGithub DiscussionsX 上提供反馈。


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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有