天天看點

陪你解讀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等類的實作

  基礎架構層:包含通用的讀寫器和重試子產品 

  

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

1.2.2 概念模型  

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

  

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

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

  

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

1.3 處理原則

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

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

繼續閱讀