spring batch 入門
- spring batch 介紹
- 批處理
- spring batch
- spring batch 原理
- spring batch 架構
- spring batch 優勢
- spring batch 發展曆程
- spring batch 2.X 特性
- spring batch 2.2 新特性
- spring batch 3.0 新特性
- spring batch 4.1 新特性
- spring batch 4.2 新特性
- spring batch 3.0 新特性
- spring batch hello world
- 建立項目
- 建立job
- 啟動
github位址:
https://github.com/a18792721831/studybatch.git
文章清單:
spring batch 入門
spring batch連接配接資料庫
spring batch中繼資料
spring batch Job詳解
spring batch step詳解
spring batch ItemReader詳解
spring batch itemProcess詳解
spring batch itemWriter詳解
spring batch 作業流
spring batch 健壯性
spring batch 擴充性
spring batch 介紹
批處理
典型的批處理應該有以下幾個特點:
- 自動執行,根據系統設定的工作步驟自動完成
- 資料量大,少則百萬,多則千萬甚至上億
- 定時執行,如每天執行、每周或每月執行
從特點可以看出,批處理的流程可以明顯的分為3個階段:
- 讀資料,讀資料可能來自檔案,資料庫或消息隊列
- 處理資料,處理讀取的資料并下形成輸出結果
- 寫資料,将輸出結果寫入檔案、資料庫或消息隊列
spring batch
Spring batch是一個輕量級的、完善的批處理架構,旨在幫助企業建立健壯、高效的批處理應用。
Spring batch提供了打量可重用的元件,包括日志、追蹤、事務、任務作業統計、任務重新開機、跳過、重複、資源管理。
對于大資料量和高性能的批處理任務,spring bach同樣提供了進階功能和特性來支援,比如分區功能,遠端功能。
spring batch是一個批處理應用架構,不是排程架構,但需要和排程架構合作來建構完成批處理任務。
spring batch 原理
spring batch 架構
spring batch核心架構分為三層:應用層、核心層、基礎架構層。

- 應用層:包含所有的批處理作業,通過spring架構管理程式員的代碼
- 核心層:spring batch啟動和控制所需要的核心類
- 基礎架構層:提供通用的讀(ItemReader),寫(ItemWriter)和服務處理
spring batch 優勢
spring batch有如下優勢:
-
豐富的開箱即用的元件:
讀:支援文本檔案讀、xml檔案讀、資料庫讀、jms隊列讀。。
寫:支援文本檔案寫、xml檔案寫、資料庫寫、jms隊列寫。。
-
面向Chunk的處理:
面向Chunk的處理,支援多次讀,一次寫,避免了多次對資源得到寫入,增加批處理的處理效率。
-
事務管理:
spring batch架構預設采用spring提供的聲明式事務管理模型。面向Chunk的操作支援事務管理,同時支援為每個tasklet操作設定細粒度的事務配置:隔離級别、傳播行為、逾時設定等。
-
中繼資料管理:
spring batch架構自動記錄job的執行情況,包括job的執行成功、失敗、失敗的異常資訊,step的執行成功、失敗、失敗的異常資訊,執行次數,重試次數,跳過次數,執行時間等,友善後期的維護和檢視。
-
易監控的批處理應用:
spring batch提供多種監控技術,支援對批處理操作的資訊進行檢視和管理,通過spring batch架構為批處理應用提供了靈活的監控模式:
- 直接檢視資料庫
- 通過spring batch提供的API檢視
- 通過spring batch admin檢視
- 通過jmx控制台檢視
-
豐富的流程定義:
spring batch架構支援順序任務,條件分支任務,基于順序和條件任務可以組織複雜的任務流程。同時spring batch支援複用已經定義的job或者step,同時提供job和step的繼承能力和抽象能力。
-
健壯的批處理應用:
spring batch架構支援作業的跳過,重試,重新開機能力,避免因錯誤導緻批處理作業的異常中斷:
- 跳過(skip):通常在發生非緻命異常的情況下,應該不中斷批處理應用;
- 重試(retry):發生瞬态異常情況下,應該能夠通過重試操作避免該類異常,保證批處理應用的連續性和穩定性
- 重新開機(restart):當批處理應用因錯誤發生錯誤後,應該能夠在最後執行失敗的地方重新啟動 Job執行個體
-
易擴充的批處理應用:
spring batch架構通過并發和并行技術實作應用的橫向和縱向擴充機制,滿足資料處理性能的需要。
擴充機制包括:
- 多線程執行一個Step
- 多線程并行執行多個Step
- 遠端執行作業
- 分區執行
-
複用企業現有代碼
spring batch架構提供多種Adapter能力,使得企業現有的服務可以友善內建到批處理應用中,避免重新開發。
spring batch 發展曆程
spring batch 2.X 特性
-
支援java 5
支援java5提供的增強特性
- 非順序的Step支援
-
面向Chunk處理
spring batch 1.X的執行時序圖
- spring batch 2.X的執行時序圖
-
邏輯結構優化
spring batch 1.X的邏輯結構
- spring batch 1.X的代碼組織結構
- spring batch 2.X的邏輯結構和代碼結構
-
強化中繼資料通路
spring batch 2.X中,新增了JobExplorer和JobOperator,整體的關系圖
-
增強擴充性
遠端分塊
分區
-
可配置
spring batch 2.X增加了批處理的命名空間,簡化了配置(對應的是xsd,也就是xml配置方式)
spring batch 2.2 新特性
- 支援spring data 內建
- 支援java配置
- 重試子產品重構
- 作業參數變化
spring batch 3.0 新特性
- JSR-352支援
- 改進的Spring Batch Integration子產品
- 更新到支援Spring 4和Java 8
- JobScope支援
- SQLite支援
Spring Batch參考文檔中文版
spring batch 4.1 新特性
- 注解SpringBatchTest:用于更友善的測試batch元件
- 注解EnableBatchIntegration:用于簡化遠端分塊和分區配置
- 支援json資料格式
- 支援bean validation api驗證項目
- 支援jsr-305注解
-
API的增強功能FlatFileItemWriterBuilder
Spring Batch 4.1 正式釋出,帶來了大量新特性
spring batch 4.2 新特性
- 使用Micrometer 來支援批量名額(batch metrics)
- 支援從Apache Kafka topics 讀取/寫入(reading/writing) 資料
- 支援從Apache Avro 資源中讀取/寫入(reading/writing) 資料
- 改進支援文檔
Spring Batch 4.2 新特性
spring batch 3.0 新特性
- 新增
SynchronizedStreamWriter
- 新增
,JpaQueryProvider
JpaCursorItemReader
- 新增
JobParameterIncrementer
- GraalVM支援
- Java記錄支援
What’s New in Spring Batch 4.3
spring batch hello world
建立一個spring batch 的hello world非常的簡單。
在spring batch的quick start 就有執行個體
Creating a Batch Service
建立項目
在ide中選擇建立spring項目
選擇gradle項目,jdk11
選中spring batch
因為spring batch還需要存儲中繼資料,是以,還需要一個資料庫
建立job
項目建立完成後,等待依賴下載下傳。
然後建立job
在HelloJobConf上需要加上注解,并且注入操作spring batch中繼資料的接口
建立ItemReader,因為批處理,如果一直有資料,會一直執行下去,是以,我們需要一個變量來辨別退出批處理的時機
可以看到,我們隻想批處理20次,reader讀取的是字元串。
建立ItemProcess,process裡面我們什麼都不做,列印reader的字元串。
建立ItemWriter,writer裡面也隻是列印
建立執行步step
建立job
啟動
直接啟動spring boot main類即可
可以看出來,10個一批,和我們在chunk中定義的一樣。
第21個結束,共3批
怎麼區分批?