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


前言

  整個章節由淺入深了解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次
  • 盡可能壓力測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM