陪你解讀Spring Batch(一)Spring Batch介紹

GrimMjx發表於2019-02-18

前言

  整個章節由淺入深瞭解Spring Batch,讓你掌握批處理利器。面對大批量資料毫無懼色。本章只做介紹,後面章節有程式碼示例。好了,接下來是我們的主角Spring Batch。

 

1.1 背景介紹

1.1.1 誕生

  開源社群一直把大部分注意力集中在web和SOA框架中,基於java的批處理框架確很少,因此一個標準的、可重用的批處理框架對我們來說很重要。先來說一下什麼是批處理?在企業應用時,需要定期或者人工觸發的讀入大批量資料,然後完成相應的業務處理並進行歸檔。這類工作就成為批處理。

  SpringSource和Accenture致力於通過合作來解決這種狀況,Accenture在實現批處理架構上有著豐富的產業實踐經驗,SpringSource則有深厚的技術開發經驗,兩者成為強大的合作伙伴,創造出高質量的、市場認可的企業級java解決方案。因此誕生了Spring Batch

1.1.2 為什麼使用它?

  Spring Batch作為Spring的子專案,是一款輕量級的綜合批處理框架,通過它可以構建出壯健的企業級批處理應用,因為基於Spring,所以開發者十分容易上手使用。SpringBatch不僅提供了統一的讀寫介面、豐富的任務處理方式、可重用的功能,還包括了日誌,事務管理,任務統計、彈性處理等功能。使開發人員可以更多的關注業務處理過程。

  Spring Batch不是一個排程框架,因為已經有非常好的企業級排程框架包括Quartz等,它只注重任務處理相關問題,如執行任務、事務、併發等,而不是提供排程功能。它是為了和排程程式一起完成任務而設計的。比如我們希望定期的執行大批量資料任務,那麼可結合Quartz等來實現。

1.1.3 應用場景

  大量檔案處理是比較常見的企業級應用場景,比如你要做聚合支付,那麼必定會有聚合賬單,如果每天有百萬甚至千萬級別的交易資料。那麼將如何處理呢?如何進行海量資料的對賬成了難題。或者每天需要處理其他業務場景的大資料量的檔案,最後將處理好的資料寫入資料庫中。

  其實可以先不用想Spring Batch,如果沒有,我們如何開發?這裡就需要一個框架需要以下幾點:

  • 支援對多種資料來源進行操作
  • 能夠定義不同job之間的順序關係
  • 能夠定義每個job的輸入和輸出資料操作
  • 對異常輸入資料有校驗機制和彈性處理
  • 支援job重跑等處理機制

  這不就是一個批處理框架需要的基礎功能嗎?

 

1.2 Spring Batch架構

1.2.1 框架層次

  Spring Batch分三層,應用層,核心層和基礎架構層。

  應用層:開發人員使用Spring Batch編寫的所有批處理任務程式碼

  核心層:包含載入和控制批處理作業所需的核心類,Job,Step等類的實現

  基礎架構層:包含通用的讀寫器和重試模組 

  

1.2.2 概念模型  

  下圖顯示了完整的概念模型,JobLauncher啟動Job,Job可以有多個Step組合,每一個Step由開發者自己編寫,可一把一個大Step分成多個小Step,完全看開發者意願。每一個Step對應一個ItemReader、ItemProcessor和ItemWriter。所有的批處理框架都可以抽象成最簡單的過程,讀取資料,處理資料,寫資料。所以Spring Batch提供了3個介面,ItemReader、ItemProcessor和ItemWriter。JobRepository則是記錄Job、Step和發起Job的執行資訊等。

  

  下圖為處理流程,reader讀,processor處理校驗資料,writer寫資料(入參是list,減少io次數)

  

 

1.3 處理原則

  下面是一些處理原則,可參考

  • 儘量使用公用模組
  • 儘量簡化操作,不要有複雜的業務邏輯。更不要處理一條資料還要調外部介面進行資料加工
  • 儘可能少的IO操作
  • 同一個批處理檔案不要處理2次
  • 儘可能壓力測試

 

相關文章