Spring Batch 介紹

企業領域中的許多應用都需要進行批次處理,以便在關鍵任務環境中執行業務操作。這些業務操作包括:

  • 對大量資訊進行自動化、複雜的處理,無需使用者互動即可最有效地完成。這些操作通常包括基於時間的事件(例如月末計算、通知或通訊)。

  • 將複雜的業務規則定期應用於非常大的資料集進行重複處理(例如,保險福利確定或費率調整)。

  • 整合來自內部和外部系統的資訊,這通常需要格式化、驗證並以事務方式處理到記錄系統中。企業每天使用批處理處理數十億筆事務。

Spring Batch 是一個輕量級、全面的批處理框架,旨在支援開發對企業系統日常執行至關重要的健壯批處理應用。Spring Batch 基於 Spring Framework 的特點(生產力、基於 POJO 的開發方法和易用性),同時使開發者在需要時能輕鬆訪問和使用更高階的企業服務。Spring Batch 不是一個排程框架。在商業和開源領域都有許多優秀的企業排程器(例如 Quartz, Tivoli, Control-M 等)。Spring Batch 旨在與排程器協同工作,而不是取代排程器。

Spring Batch 提供了在處理大量記錄時必不可少的許多可重用功能,包括日誌和追蹤、事務管理、Job 處理統計、Job 重啟、跳過和資源管理。它還提供了更高階的技術服務和特性,透過最佳化和分割槽技術實現極高吞吐量和高效能的批處理 Job。你可以在簡單的用例(例如將檔案讀入資料庫或執行儲存過程)和複雜、高吞吐量的用例(例如在資料庫之間移動大量資料、轉換資料等)中使用 Spring Batch。高吞吐量的批處理 Job 可以以高度可伸縮的方式使用該框架來處理大量資訊。

背景

雖然開源軟體專案和相關社群更關注基於 Web 和微服務的架構框架,但對於適應基於 Java 的批處理需求的、可重用架構框架的關注度明顯不足,儘管企業 IT 環境中持續需要處理此類任務。缺乏標準、可重用的批處理架構導致在客戶端企業 IT 部門內部開發了許多一次性、內部使用的解決方案。

SpringSource(現為 VMware)與埃森哲(Accenture)合作改變了這一狀況。埃森哲在實施批處理架構方面的實踐行業和技術經驗、SpringSource 深厚的技術經驗以及 Spring 久經考驗的程式設計模型共同形成了一個自然且強大的合作伙伴關係,旨在建立高質量、符合市場需求的軟體,填補企業 Java 領域的重要空白。兩家公司與許多正在透過開發基於 Spring 的批處理架構解決方案來解決類似問題的客戶進行了合作。這些輸入提供了有用的額外細節和現實約束,有助於確保該解決方案能夠應用於客戶面臨的實際問題。

埃森哲貢獻了其此前專有的批處理架構框架給 Spring Batch 專案,同時還貢獻了 committer 資源來推動支援、增強和現有功能集。埃森哲的貢獻基於其在構建批處理架構方面數十年的經驗,涵蓋了前幾代平臺:大型機上的 COBOL、Unix 上的 C++ 以及現在的 Java 平臺。

埃森哲與 SpringSource 的合作努力旨在推動軟體處理方法、框架和工具的標準化,以便企業使用者在建立批處理應用時能夠持續使用。希望為其企業 IT 環境提供標準、成熟解決方案的公司和政府機構都可以從 Spring Batch 中受益。

使用場景

典型的批處理程式通常會

  • 從資料庫、檔案或佇列讀取大量記錄。

  • 以某種方式處理資料。

  • 以修改後的形式寫回資料。

Spring Batch 自動化了這種基本的批處理迭代,提供了將類似事務作為一組進行處理的能力,通常在無需使用者互動的離線環境中進行。批處理 Job 是大多數 IT 專案的一部分,而 Spring Batch 是唯一提供健壯、企業級解決方案的開源框架。

業務場景

Spring Batch 支援以下業務場景:

  • 定期提交批處理。

  • 併發批處理:Job 的並行處理。

  • 分階段的、企業訊息驅動的處理。

  • 大規模並行批處理。

  • 失敗後手動或計劃重啟。

  • 依賴 Step 的順序處理(可擴充套件到工作流驅動的批處理)。

  • 部分處理:跳過記錄(例如,在回滾時)。

  • 整批事務,適用於批處理大小較小或已有儲存過程或指令碼的情況。

技術目標

Spring Batch 的技術目標如下:

  • 讓批處理開發者使用 Spring 程式設計模型:專注於業務邏輯,讓框架處理基礎設施。

  • 明確區分基礎設施、批處理執行環境和批處理應用。

  • 提供通用的核心執行服務介面,所有專案都可以實現。

  • 提供核心執行介面的簡單預設實現,可“開箱即用”。

  • 透過在所有層中使用 Spring 框架,輕鬆配置、定製和擴充套件服務。

  • 所有現有的核心服務都應易於替換或擴充套件,而不影響基礎設施層。

  • 提供簡單的部署模型,架構 JAR 包與應用完全分離,使用 Maven 構建。