Spring Batch 5.1.0-M1 现已可用!

发布 | Mahmoud Ben Hassine | 2023年7月19日 | ...

我谨代表团队和所有做出贡献的人员,高兴地宣布 Spring Batch 5.1 的第一个里程碑版本现已从我们的 里程碑存储库 中提供。

此里程碑版本包含以下功能

  • 依赖项升级
  • 虚拟线程支持
  • JpaItemWriter 的内存管理改进
  • 用于项目读取器和写入器的新同步装饰器

此博文将更详细地介绍这些功能。有关完整更改列表,请查看 发行说明

依赖项升级

此里程碑版本将 Spring 依赖项升级到以下版本

  • Spring Framework 6.1.0-M2
  • Spring Integration 6.2.0-M1
  • Spring Data 3.2.0-M1
  • Spring LDAP 3.2.0-M1
  • Micrometer 1.12.0-M1

虚拟线程支持

拥抱 JDK 21 LTS 是 Spring Batch 5.1 的主要主题之一,尤其是来自 Project Loom 的虚拟线程支持。在此版本中,虚拟线程可用于框架的所有领域,例如使用虚拟线程运行并发步骤或使用虚拟线程并行启动多个步骤。

由于 Spring Batch 中精心设计的关注点分离,因此线程不会被直接管理。线程管理而是委托给 Spring Framework 中的 TaskExecutor 实现。这种面向接口的编程方法允许您以透明且灵活的方式在 TaskExecutor 实现之间切换。

在 Spring Framework 6.1 中,引入了一种基于虚拟线程的新 TaskExecutor 实现,即 VirtualThreadTaskExecutor。此 TaskExecutor 可用于 Spring Batch 中任何需要 TaskExecutor 的地方。以下示例显示了如何使用虚拟线程配置多线程步骤

@Bean
public VirtualThreadTaskExecutor taskExecutor() {
	return new VirtualThreadTaskExecutor("spring-batch-");
}

@Bean
public Step step(JobRepository jobRepository, PlatformTransactionManager transactionManager,
				 ItemReader<Integer> itemReader, ItemWriter<Integer> itemWriter,
				 VirtualThreadTaskExecutor taskExecutor) {
	return new StepBuilder("step", jobRepository).<Integer, Integer>chunk(2, transactionManager)
		.reader(itemReader)
		.writer(itemWriter)
		.taskExecutor(taskExecutor)
		.build();
}

JpaItemWriter 的内存管理改进

使用 JpaItemWriter 时,当块大小足够大时,JPA 持久性上下文可能会快速增长。如果未及时清除,这可能会导致 OutOfMemoryError 错误。

在此里程碑版本中,在 JpaItemWriter 中引入了一个名为 clearPersistenceContext 的新选项,用于在写入每个项目块后清除持久性上下文。此选项改进了处理大量数据并配置了较大块大小的面向块的步骤的内存管理。

用于项目读取器和写入器的新同步装饰器

在 5.0 版之前,Spring Batch 提供了两个装饰器 SynchronizedItemStreamReaderSynchronizedItemStreamWriter 来同步线程对 ItemStreamReader#readItemStreamWriter#write 的访问。当在多线程步骤中使用非线程安全的项目流时,这些装饰器很有用。

虽然这些装饰器适用于 ItemStream 实现,但它们不适用于非项目流。例如,这些装饰器不能用于同步对 ListItemReader#readKafkaItemWriter#write 的访问。

为了方便用户,此版本也引入了非项目流的新装饰器。凭借此新功能,Spring Batch 中的所有项目读取器和写入器现在都可以同步,而无需编写自定义装饰器。

接下来是什么?

首先,我要感谢所有参与此版本的贡献者!您可以使用 Spring Boot 3.2.0-M1 尝试 Spring Batch 5.1.0-M1。我们计划在 2023 年 11 月底发布 Spring Batch 5.1 GA。

我们期待您在 Github IssuesGithub DiscussionsTwitterStackOverflow 上提供反馈。

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

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

抢先一步

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

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部