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 可以高度可擴展的方式使用該框架來處理大量的資訊。

背景

雖然開放原始碼軟體專案和相關社群更加關注基於網路和微服務的架構框架,但儘管企業 IT 環境中持續需要處理此類處理,但仍然明顯缺乏可重複使用的架構框架來滿足基於 Java 的批次處理需求。缺乏標準、可重複使用的批次架構導致在客戶企業 IT 功能部門內開發了許多一次性的內部解決方案。

SpringSource(現在的 VMware)和 Accenture 合作來改變這種狀況。Accenture 在實作批次架構方面的實務產業和技術經驗、SpringSource 的深厚技術經驗以及 Spring 經過驗證的程式設計模型共同形成了自然的強大合作夥伴關係,旨在創建高品質、市場相關的軟體,以填補企業 Java 中的重要空白。這兩家公司都與許多客戶合作,這些客戶透過開發基於 Spring 的批次架構解決方案來解決類似的問題。這種投入提供了一些有用的額外細節和實際限制,有助於確保該解決方案可以應用於客戶提出的實際問題。

Accenture 將先前專有的批次處理架構框架貢獻給 Spring Batch 專案,並提供提交者資源來推動支援、增強功能和現有功能集。Accenture 的貢獻基於數十年來在建構具有最新幾代平台批次架構的經驗:主機上的 COBOL、Unix 上的 C++,以及現在隨處可見的 Java。

Accenture 和 SpringSource 之間的合作努力旨在促進軟體處理方法、框架和工具的標準化,企業使用者在建立批次應用程式時可以一致地使用這些方法、框架和工具。希望為其企業 IT 環境提供標準、經過驗證的解決方案的公司和政府機構可以從 Spring Batch 中受益。

使用情境

典型的批次程式通常

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

  • 以某種方式處理資料。

  • 以修改形式寫回資料。

Spring Batch 自動執行此基本批次迭代,提供將相似交易作為一組處理的能力,通常在沒有任何使用者互動的離線環境中進行。批次 Job 是大多數 IT 專案的一部分,而 Spring Batch 是唯一提供穩健、企業級解決方案的開放原始碼框架。

業務情境

Spring Batch 支援以下業務情境:

  • 定期提交批次處理。

  • 並行批次處理:Job 的平行處理。

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

  • 大規模平行批次處理。

  • 失敗後手動或排程重新啟動。

  • 相依 Step 的循序處理(擴展到工作流程驅動的批次)。

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

  • 全批次交易,適用於批次大小較小或現有預存程序或腳本的情況。

技術目標

Spring Batch 具有以下技術目標:

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

  • 在基礎架構、批次執行環境和批次應用程式之間提供清晰的職責分離。

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

  • 提供核心執行介面的簡單和預設實作,可以「開箱即用」。

  • 透過在所有層中使用 Spring Framework,可以輕鬆設定、自訂和擴展服務。

  • 所有現有的核心服務都應該易於替換或擴展,而不會對基礎架構層產生任何影響。

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