領先一步
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 Batch 5.1.0-M1 和 Spring Boot 3.2.0-M1。我們計劃在 2023 年 11 月稍後發佈 Spring Batch 5.1 GA。
我們期待您在 Github Issues、Github Discussions、Twitter 和 StackOverflow 上的回饋。