抢先一步
VMware 提供培训和认证,助您快速进步。
了解更多我代表团队以及所有贡献者,高兴地宣布 Spring Batch 5.1 的第一个里程碑版本现已在我们的里程碑仓库中提供。
此里程碑版本包含以下特性
这篇博客文章将更详细地介绍这些特性。有关更改的完整列表,请查看发布说明。
此里程碑版本将 Spring 依赖项升级到以下版本
拥抱 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
时,如果块大小足够大,JPA 持久化上下文可能会快速增长。如果未能及时适当地清除,这可能会导致 OutOfMemoryError
错误。
在此里程碑版本中,JpaItemWriter
中引入了一个名为 clearPersistenceContext
的新选项,用于在写入每块项目后清除持久化上下文。此选项改进了处理大量数据并配置了较大块大小的块导向型步骤的内存管理。
在 5.0 版本之前,Spring Batch 提供了两个装饰器 SynchronizedItemStreamReader
和 SynchronizedItemStreamWriter
来同步线程对 ItemStreamReader#read
和 ItemStreamWriter#write
的访问。这些装饰器在使用非线程安全的 item streams 进行多线程步骤时非常有用。
虽然这些装饰器适用于 ItemStream
实现,但它们不适用于非 item streams。例如,这些装饰器不能用于同步对 ListItemReader#read
或 KafkaItemWriter#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 Issues、Github Discussions、Twitter 和 StackOverflow 上提供反馈意见。