搶先一步
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 上提供反饋意見。