Spring Batch 5.1.0-M1 现已发布!

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

我代表团队以及所有贡献者,高兴地宣布 Spring Batch 5.1 的第一个里程碑版本现已在我们的里程碑仓库中提供。

此里程碑版本包含以下特性

  • 依赖项升级
  • 虚拟线程支持
  • JpaItemWriter 中的内存管理改进
  • 新的用于 item readers 和 writers 的同步装饰器

这篇博客文章将更详细地介绍这些特性。有关更改的完整列表,请查看发布说明

依赖项升级

此里程碑版本将 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。无论 Spring Batch 何处需要 TaskExecutor,都可以使用此 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 的新选项,用于在写入每块项目后清除持久化上下文。此选项改进了处理大量数据并配置了较大块大小的块导向型步骤的内存管理。

新的用于 item readers 和 writers 的同步装饰器

在 5.0 版本之前,Spring Batch 提供了两个装饰器 SynchronizedItemStreamReaderSynchronizedItemStreamWriter 来同步线程对 ItemStreamReader#readItemStreamWriter#write 的访问。这些装饰器在使用非线程安全的 item streams 进行多线程步骤时非常有用。

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

为了方便用户,此版本也为非 item streams 引入了新的装饰器。借助此新特性,现在可以同步 Spring Batch 中的所有 item readers 和 writers,而无需编写自定义装饰器。

下一步是什么?

首先,我要感谢所有为此版本做出贡献的贡献者!您可以将 Spring Batch 5.1.0-M1 与 Spring Boot 3.2.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 社区所有即将到来的活动。

查看全部