一、SpringBatch是一個批處理的框架,作為一個Spring組件,提供了通過使用Spring的依賴注入來處理批處理的條件。
什么是批處理呢?
在現代企業應用當中,面對復雜的業務以及海量的數據,除了通過龐雜的人機交互界面進行各種處理外,還有一類工作,不需要人工干預,只需要定期讀入大批量數據,然后完成相應業務處理並進行歸檔。這類工作即為“批處理”。比如近期金融項目中的撮合功能,不需要人工干預,自動對借款人和出借人進行匹配撮合,完成借貸功能。
從上面的描述可以看出,批處理應用有如下幾個特點:
-
- 數據量大,少則百萬,多則上億的數量級。
- 不需要人工干預,由系統根據配置自動完成。
- 與時間相關,如每天執行一次或每月執行一次。
同時,批處理應用又明顯分為三個環節:
-
- 讀數據,數據可能來自文件、數據庫或消息隊列等
- 數據處理,如電信支撐系統的計費處理
- 寫數據,將輸出結果寫入文件、數據庫或消息隊列等
因此,從系統架構上,應重點考慮批處理應用的事務粒度、日志監控、執行、資源管理(尤其存在並發的情況下)。從系統設計上,應重點考慮數據讀寫與業務處理的解耦,提高復用性以及可測試性。
二、SpringBatch的業務場景有:
- 周期性的提交批處理
- 把一個任務並行處理
- 消息驅動應用分級處理
- 大規模並行批處理
- 手工或調度使用任務失敗之后重新啟動
- 有依賴步驟的順序執行(使用工作流驅動擴展)
- 處理時跳過部分記錄
- 成批事務:為小批量的或有的存儲過程/腳本的場景使用
三、SpringBatch的架構圖
SpringBatch使用三層架構,三層分別為應用、核心和基礎服務。
細化的體系結構
應用層:包含所有的批處理作業,通過Spring框架管理程序員自定義的代碼。
核心層:包含了Batch啟動和控制所需要的核心類,如:JobLauncher、Job和step等。
基礎服務層:應用層和核心層建立在基礎服務層即基礎架構層智商,基礎架構層提供共通的讀(ItemReader)、寫(ItemWriter)和服務(如RetryTemplate:重試模塊,可以被應用層和核心層使用)。
另外我們還需要知道,Spring Batch 是一款批處理應用框架,不是調度框架。它只關注批處理任務相關的問題,如事務、並發、監控、執行等,並不提供相應的調度功能。因此,如果我們希望批處理任務定期執行,可結合 Quartz 等成熟的調度框架實現。