Spring Batch 6.0.0-M1 已釋出!

版本釋出 | Mahmoud Ben Hassine | 2025年7月23日 | ...

我很高興代表團隊和所有貢獻者宣佈,Spring Batch 6.0.0-M1 現已在 Maven Central 上釋出!這個第一個里程碑引入了多項新功能、增強功能和錯誤修復。它還包括一些 API 破壞性更改和棄用。

這篇博文將引導您瞭解以下主要更改

  • 依賴升級
  • 批處理基礎設施配置改進
  • 新的命令列作業操作員
  • 棄用和精簡

有關完整的更改列表,請檢視釋出說明遷移指南

依賴升級

在此主要版本中,Spring 依賴項已升級到以下版本:

  • Spring Framework 7.0
  • Spring Integration 7.0
  • Spring Data 4.0
  • Spring LDAP 4.0
  • Spring AMQP 4.0
  • Spring Kafka 4.0
  • Micrometer 1.16

請注意,此版本相容 Java 17 及更高版本。

批處理基礎設施配置改進

用於批處理基礎設施配置的新註解和類

在 v6 之前,@EnableBatchProcessing 註解與基於 JDBC 的基礎設施繫結。現在不再是這樣了。引入了兩個新註解來配置底層作業倉庫:@EnableJdbcJobRepository@EnableMongoJobRepository

從 v6 開始,@EnableBatchProcessing 允許您配置批處理基礎設施的通用屬性,而特定於儲存的屬性可以使用新的專用註解來指定。

以下是這些註解的使用示例:

@EnableBatchProcessing(taskExecutorRef = "batchTaskExecutor")
@EnableJdbcJobRepository(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
class MyJobConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("job", jobRepository)
                    // job flow omitted
                    .build();
	}
}

同樣,基於 DefaultBatchConfiguration 的程式設計模型也進行了更新,引入了兩個新的配置類來定義特定於儲存的屬性:JdbcDefaultBatchConfigurationMongoDefaultBatchConfiguration。這些類可用於以程式設計方式配置每個作業倉庫的特定屬性以及其他批處理基礎設施 Bean。

預設情況下,無資源批處理基礎設施

DefaultBatchConfiguration 類已更新,預設提供“無資源”批處理基礎設施(基於 v5.2 中引入的 ResourcelessJobRepository 實現)。這意味著它不再需要用於作業倉庫的記憶體資料庫(如 H2),而這在以前是批處理元資料儲存所必需的。

此外,當不使用元資料時,此更改將提高批處理應用程式的預設效能,因為 ResourcelessJobRepository 不需要任何資料庫連線或事務。

最後,此更改將有助於減少批處理應用程式的記憶體佔用,因為不再需要記憶體資料庫來儲存元資料。

批處理基礎設施配置簡化

在 v6 之前,非平凡的 Spring Batch 應用程式的典型配置非常複雜,需要大量 Bean:JobRepositoryJobLauncherJobExplorerJobOperatorJobRegistryJobRegistrySmartInitializingSingleton 等。這需要大量的配置,有時還會出現重複程式碼,例如需要在 JobRepositoryJobExplorer 上配置相同的執行上下文序列化器。

在此版本中,已對批處理基礎設施配置進行了多項更改以進行簡化:

  • JobRepository 現在擴充套件了 JobExplorer 介面,因此無需定義單獨的 JobExplorer Bean。
  • JobOperator 現在擴充套件了 JobLauncher 介面,因此無需定義單獨的 JobLauncher Bean。
  • JobRegistry 現在足夠智慧,可以自動註冊作業,因此無需定義單獨的 JobRegistrySmartInitializingSingleton Bean 或 JobRegistryBeanPostProcessor

這減少了典型批處理應用程式所需的 Bean 數量,並簡化了配置程式碼。

新的命令列作業運算子

Spring Batch 自版本 1 以來就提供了 CommandLineJobRunner。雖然這個執行器多年來一直很好地服務於其目的,但在可擴充套件性和定製方面開始暴露出一些限制。已經報告了許多問題,例如靜態初始化、處理選項和引數的非標準方式以及缺乏可擴充套件性。

此外,這些問題使得無法在 Spring Boot 中重用該執行器,導致兩個專案中出現重複程式碼以及行為差異(例如作業引數遞增器行為差異),這讓許多使用者感到困惑。

此版本引入了 CommandLineJobRunner 的現代版本,名為 CommandLineJobOperator,它允許您從命令列操作批處理作業(啟動、停止、重啟等),並且是可定製、可擴充套件的,並已更新以適應 Spring Batch 6 中引入的新更改。

廢棄和精簡

與任何主要版本一樣,Spring Batch 6.0 中廢棄或刪除了一些功能。以下更改值得注意:

  • 所有先前版本中廢棄的 API 和功能均已刪除
  • 透過 @EnableBatchProcessing(modular = true) 進行的模組化配置已被廢棄
  • 此版本中廢棄了一些 API,以簡化核心 API 並縮小其範圍

有關這些更改的更多詳細資訊,請參閱遷移指南

反饋

我要感謝在此版本中發揮作用的所有貢獻者!隨著我們繼續開發 Spring Batch 6,我們期待您在 Github IssuesGithub DiscussionsX 上提供反饋。


Spring Batch 主頁|Github 上的原始碼|參考文件

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有