天天看點

spring batch 入門

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 介紹

批處理

典型的批處理應該有以下幾個特點:

  1. 自動執行,根據系統設定的工作步驟自動完成
  2. 資料量大,少則百萬,多則千萬甚至上億
  3. 定時執行,如每天執行、每周或每月執行

從特點可以看出,批處理的流程可以明顯的分為3個階段:

  1. 讀資料,讀資料可能來自檔案,資料庫或消息隊列
  2. 處理資料,處理讀取的資料并下形成輸出結果
  3. 寫資料,将輸出結果寫入檔案、資料庫或消息隊列

spring batch

Spring batch是一個輕量級的、完善的批處理架構,旨在幫助企業建立健壯、高效的批處理應用。

Spring batch提供了打量可重用的元件,包括日志、追蹤、事務、任務作業統計、任務重新開機、跳過、重複、資源管理。

對于大資料量和高性能的批處理任務,spring bach同樣提供了進階功能和特性來支援,比如分區功能,遠端功能。

spring batch是一個批處理應用架構,不是排程架構,但需要和排程架構合作來建構完成批處理任務。

spring batch 原理

spring batch 架構

spring batch核心架構分為三層:應用層、核心層、基礎架構層。

spring batch 入門
  • 應用層:包含所有的批處理作業,通過spring架構管理程式員的代碼
  • 核心層:spring batch啟動和控制所需要的核心類
  • 基礎架構層:提供通用的讀(ItemReader),寫(ItemWriter)和服務處理

spring batch 優勢

spring batch有如下優勢:

  1. 豐富的開箱即用的元件:

    讀:支援文本檔案讀、xml檔案讀、資料庫讀、jms隊列讀。。

    寫:支援文本檔案寫、xml檔案寫、資料庫寫、jms隊列寫。。

  2. 面向Chunk的處理:

    面向Chunk的處理,支援多次讀,一次寫,避免了多次對資源得到寫入,增加批處理的處理效率。

  3. 事務管理:

    spring batch架構預設采用spring提供的聲明式事務管理模型。面向Chunk的操作支援事務管理,同時支援為每個tasklet操作設定細粒度的事務配置:隔離級别、傳播行為、逾時設定等。

  4. 中繼資料管理:

    spring batch架構自動記錄job的執行情況,包括job的執行成功、失敗、失敗的異常資訊,step的執行成功、失敗、失敗的異常資訊,執行次數,重試次數,跳過次數,執行時間等,友善後期的維護和檢視。

  5. 易監控的批處理應用:

    spring batch提供多種監控技術,支援對批處理操作的資訊進行檢視和管理,通過spring batch架構為批處理應用提供了靈活的監控模式:

  • 直接檢視資料庫
  • 通過spring batch提供的API檢視
  • 通過spring batch admin檢視
  • 通過jmx控制台檢視
  1. 豐富的流程定義:

    spring batch架構支援順序任務,條件分支任務,基于順序和條件任務可以組織複雜的任務流程。同時spring batch支援複用已經定義的job或者step,同時提供job和step的繼承能力和抽象能力。

  2. 健壯的批處理應用:

    spring batch架構支援作業的跳過,重試,重新開機能力,避免因錯誤導緻批處理作業的異常中斷:

  • 跳過(skip):通常在發生非緻命異常的情況下,應該不中斷批處理應用;
  • 重試(retry):發生瞬态異常情況下,應該能夠通過重試操作避免該類異常,保證批處理應用的連續性和穩定性
  • 重新開機(restart):當批處理應用因錯誤發生錯誤後,應該能夠在最後執行失敗的地方重新啟動 Job執行個體
  1. 易擴充的批處理應用:

    spring batch架構通過并發和并行技術實作應用的橫向和縱向擴充機制,滿足資料處理性能的需要。

    擴充機制包括:

  • 多線程執行一個Step
  • 多線程并行執行多個Step
  • 遠端執行作業
  • 分區執行
  1. 複用企業現有代碼

    spring batch架構提供多種Adapter能力,使得企業現有的服務可以友善內建到批處理應用中,避免重新開發。

spring batch 發展曆程

spring batch 2.X 特性

  • 支援java 5

    支援java5提供的增強特性

  • 非順序的Step支援
  • spring batch 入門
  • 面向Chunk處理

    spring batch 1.X的執行時序圖

  • spring batch 入門
  • spring batch 2.X的執行時序圖
  • spring batch 入門
  • 邏輯結構優化

    spring batch 1.X的邏輯結構

  • spring batch 入門
  • spring batch 1.X的代碼組織結構
  • spring batch 入門
  • spring batch 2.X的邏輯結構和代碼結構
  • spring batch 入門
  • 強化中繼資料通路

    spring batch 2.X中,新增了JobExplorer和JobOperator,整體的關系圖

  • spring batch 入門
  • 增強擴充性

    遠端分塊

    分區

  • 可配置

    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注解
  • ​FlatFileItemWriterBuilder​

    ​API的增強功能

​​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

spring batch 入門

因為spring batch還需要存儲中繼資料,是以,還需要一個資料庫

spring batch 入門

建立job

項目建立完成後,等待依賴下載下傳。

然後建立job

spring batch 入門

在HelloJobConf上需要加上注解,并且注入操作spring batch中繼資料的接口

spring batch 入門

建立ItemReader,因為批處理,如果一直有資料,會一直執行下去,是以,我們需要一個變量來辨別退出批處理的時機

spring batch 入門
spring batch 入門

可以看到,我們隻想批處理20次,reader讀取的是字元串。

建立ItemProcess,process裡面我們什麼都不做,列印reader的字元串。

spring batch 入門

建立ItemWriter,writer裡面也隻是列印

spring batch 入門

建立執行步step

spring batch 入門

建立job

spring batch 入門

啟動

直接啟動spring boot main類即可

spring batch 入門

可以看出來,10個一批,和我們在chunk中定義的一樣。

spring batch 入門

第21個結束,共3批

spring batch 入門

怎麼區分批?