Spring Batch 4.3.0-M1 現已發布!

發布 | Mahmoud Ben Hassine | 2020 年 6 月 26 日 | ...

我謹代表 Spring Batch 團隊宣布 Spring Batch 4.3.0-M1 現在可以從我們的 milestone repository 取得。

新功能?

此版本包含新功能、效能改進、錯誤修正,以及文件和相依性更新!您可以在 發布說明中找到完整的變更清單,以下是主要亮點

新功能

1. 新的同步 ItemStreamWriter

SynchronizedItemStreamReader 類似,我們新增了 SynchronizedItemStreamWriter。此功能在多執行緒步驟中非常有用,在這些步驟中,並行執行緒需要同步,以避免覆寫彼此的寫入。

2. 在 JpaPagingItemReader 中新增對命名查詢的支援

到目前為止,可以使用 JpaPagingItemReader 使用命名查詢。但是,這需要建立自訂查詢提供者,如下所示

JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
    .name("fooReader")
    .queryProvider(new AbstractJpaQueryProvider() {
       @Override
       public Query createQuery() {
          return getEntityManager().createNamedQuery("allFoos", Foo.class);
       }

       @Override
       public void afterPropertiesSet() throws Exception {
       }
    })
    // set other properties on the reader
    .build();

在此版本中,我們引入了 JpaNamedQueryProvider 以及 JpaNativeQueryProvider,以簡化配置,現在可以這樣編寫

JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
		.name("fooReader")
		.queryProvider(new JpaNamedQueryProvider("allFoos", Foo.class))
		// set other properties on the reader
		.build();

3. 使用 JUnit 5 簡化 Spring Batch 測試的配置

與許多 Spring Boot 測試註釋都使用 @ExtendWith(SpringExtension.class) (例如 @SpringBootTest@WebMvcTest 等) 進行元註釋類似,我們更新了 @SpringBatchTest 以使用 @ExtendWith(SpringExtension.class) 進行元註釋。這簡化了使用 JUnit Jupiter 編寫測試時的配置。

請注意,此功能不影響 JUnit 4 使用者,它僅與基於 JUnit 5 的測試相關。

效能改進

沿著我們在 版本 4.2 中引入的效能改進,我們也繼續努力改進此版本中框架的幾個部分。

1. 在 RepositoryItemWriter 中使用批次寫入

在 4.2 版之前,需要指定用於將項目儲存到資料庫的方法名稱。然後在 for 迴圈中呼叫此方法以儲存所有項目。為了使用 CrudRepository#saveAll,需要擴充 RepositoryItemWriter 並覆寫 write(List),這很不方便。

在此版本中,我們預設讓 RepositoryItemWriter 使用 CrudRepository#saveAll。根據我們的基準測試 repository-item-writer-benchmark,此變更將寫入器的效能提高了 2 倍

perf-repository-item-write

2. 在 MongoItemWriter 中使用批次寫入

到目前為止,MongoItemWriterfor 迴圈中使用 MongoOperations#save() 將項目儲存到資料庫。在此版本中,我們用對 BulkOperations 的單一呼叫取代了此機制。根據我們的基準測試 mongo-item-writer-benchmark,進行此變更後,MongotItemWriter 比以前的版本快 25 倍

perf-mongo-item-writer

3. 改善 Job 啟動/重新啟動時間

在啟動新的 Job (或重新啟動失敗的 Job) 時,Spring Batch 會執行許多檢查以驗證一些條件

  • 檢查目前的執行是新的執行還是失敗執行的重新啟動
  • 檢查執行次數是否超過啟動限制
  • 其他檢查....

所有這些檢查都涉及呼叫 JobRepository.getStepExecutionCount 以計算步驟執行的次數。在 v4.2 之前,此方法的實作載入所有 Job 執行和步驟執行,以在框架端進行記憶體中的計數。在此版本中,我們已將實作變更為對資料庫進行單一呼叫並使用 count 查詢。此變更改善了記憶體使用率以及方法的響應時間 (根據我們的基準測試 step-execution-count-benchmark 提高了 6 倍),進而改善了步驟和 Job 的整體啟動時間

perf-step-execution-count

相依性升級

此版本將 Spring 專案相依性升級到以下版本

  • Spring Framework 5.3.0-M1
  • Spring Data 2020.0.0-M1
  • Spring Integration 5.4.0-M1
  • Spring AMQP 2.3.0-M1

Spring Batch v4.3.0-M1 可以與 Spring Boot 2.4.0-M1 一起使用,預計下週發布。敬請關注!

意見回饋與貢獻

我要感謝所有貢獻者,特別是 Parikshit Dutta,他為這個版本做出了許多貢獻! 我們期待您在 TwitterStackOverflowGithub 上針對此里程碑提供意見回饋。

腳註

所有基準測試均在配備 16Go RAM、2.9 GHz Intel Core i7 CPU、MacOS Catalina 10.15.5 和 Oracle JDK 1.8.0_201 的 Macbook Pro 上執行。 您可以在以下連結中找到所有基準測試的原始碼

Spring Batch 首頁 | GitHub 上的原始碼 | 參考文件

取得 Spring 電子報

隨時掌握 Spring 電子報的最新消息

訂閱

取得領先

VMware 提供培訓和認證,以加速您的進展。

瞭解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部