抢先一步
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
。此 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
时,当块大小足够大时,JPA 持久性上下文可能会快速增长。如果未及时清除,这可能会导致 OutOfMemoryError
错误。
在此里程碑版本中,在 JpaItemWriter
中引入了一个名为 clearPersistenceContext
的新选项,用于在写入每个项目块后清除持久性上下文。此选项改进了处理大量数据并配置了较大块大小的面向块的步骤的内存管理。
在 5.0 版之前,Spring Batch 提供了两个装饰器 SynchronizedItemStreamReader
和 SynchronizedItemStreamWriter
来同步线程对 ItemStreamReader#read
和 ItemStreamWriter#write
的访问。当在多线程步骤中使用非线程安全的项目流时,这些装饰器很有用。
虽然这些装饰器适用于 ItemStream
实现,但它们不适用于非项目流。例如,这些装饰器不能用于同步对 ListItemReader#read
或 KafkaItemWriter#write
的访问。
为了方便用户,此版本也引入了非项目流的新装饰器。凭借此新功能,Spring Batch 中的所有项目读取器和写入器现在都可以同步,而无需编写自定义装饰器。
首先,我要感谢所有参与此版本的贡献者!您可以使用 Spring Boot 3.2.0-M1 尝试 Spring Batch 5.1.0-M1。我们计划在 2023 年 11 月底发布 Spring Batch 5.1 GA。
我们期待您在 Github Issues、Github Discussions、Twitter 和 StackOverflow 上提供反馈。