背景:清結算批處理模塊使用的技術棧spring
資料:數據庫
spring batch是spring提供的一個數據處理框架。企業域中的許多應用程序須要批量處理才能在關鍵任務環境中執行業務操做。 這些業務運營包括:多線程
無需用戶交互便可最有效地處理大量信息的自動化,複雜處理。 這些操做一般包括基於時間的事件(例如月末計算,通知或通訊)。在很是大的數據集中重複處理複雜業務規則的按期應用(例如,保險利益肯定或費率調整)。集成從內部和外部系統接收的信息,這些信息一般須要以事務方式格式化,驗證和處理到記錄系統中。 批處理用於天天爲企業處理數十億的交易。框架
- 框架能力
二、領域概念模型
對於擴展性,框架提供的擴展能力包括以下的四種模式 :分佈式
Multithreaded Step 多線程執行一個Step;spa
Parallel Step 經過多線程並行執行多個Step;線程
Remote Chunking 在遠端節點上執行分佈式Chunk操做;接口
Partitioning Step 對數據進行分區,並分開執行;隊列
ItemReader:事件
包括FlatFileItemReader文本數據讀取、StaxEventItemReader XML文件數據讀取、JsonItemReader JSON文件數據讀取、JdbcPagingItemReader數據庫分頁數據讀取等實現
ItemWriter:
包括FlatFileItemWriter文本數據輸出、StaxEventItemWriter XML文件數據輸出、JsonItemWriter JSON文件數據輸出、JdbcBatchItemWriter數據庫數據插入等實現
監聽器 |
具體說明 |
JobExecutionListener |
在Job開始以前(beforeJob)和以後(aflerJob)觸發 |
StepExecutionListener |
在Step開始以前(beforeStep)和以後(afterStep)觸發 |
ChunkListener |
在 Chunk 開始以前(beforeChunk),以後(afterChunk)和錯誤後(afterChunkError)觸發 |
ItemReadListener |
在 Read 開始以前(beforeRead>,以後(afterRead)和錯誤後(onReadError)觸發 |
ItemProcessListener |
在 Processor 開始以前(beforeProcess),以後(afterProcess)和錯誤後(onProcessError)觸發 |
ItemWriterListener |
在 Writer 開始以前(beforeWrite),以後(afterWrite)和錯誤後(onWriteError)觸發 |
實現方式 :
實現JobExecutionListener 接口
註解方式 @BeforeStep @AfterStep
異常處理:
Spring Batch處理任務過程當中若是發生了異常,默認機制是立刻中止任務執行,拋出相應異常,若是任務還包含未執行的步驟也不會被執行。要改變這個默認規則,咱們能夠配置異常重試和異常跳過機制。異常跳過:遇到異常的時候不但願結束任務,而是跳過這個異常,繼續執行;異常重試:遇到異常的時候通過指定次數的重試,若是仍是失敗的話,纔會中止任務。除了這兩個特性外,本文也會記錄一些別的特性。
.faultTolerant() // 配置錯誤容忍
.retry(MyJobExecutionException.class) // 配置重試的異常類型
retryLimit(3) // 重試3次,三次事後仍是異常的話,則任務會結束
.faultTolerant() // 配置錯誤容忍
.skip(MyJobExecutionException.class) // 配置跳過的異常類型
.skipLimit(1) // 最多跳過1次,1次事後仍是異常的話,則任務會結束
事務問題:
一次Setp分爲Reader、Processor和Writer三個階段,這些階段統稱爲Item。默認狀況下若是錯誤不是發生在Reader階段,那麼不必再去從新讀取一次數據。可是某些場景下須要Reader部分也須要從新執行,好比Reader是從一個JMS隊列中消費消息,當發生回滾的時候消息也會在隊列上重放,所以也要將Reader歸入到回滾的事物中,根據這個場景可使用readerIsTransactionalQueue()來配置數據重讀:
咱們還能夠在Step中手動配置事務屬性,事物的屬性包括隔離等級(isolation)、傳播方式(propagation)以及過時時間(timeout)等:
三、元數據表
BATCH_JOB_INSTANCE |
做業實例表。用於存放Job的實例信息。 |
BATCH_JOB_EXECUTION |
做業執行器表。用於存放當前做業的執行信息,好比建立時間。執行開始時間,執行結束時間,執行的哪一個Job實例,執行狀態等。 |
BATCH_JOB_EXECUTION_PARAMS |
做業參數表。用於存放每一個Job執行時候的參數信息,該參數其實是對應Job實例的。 |
BATCH_STEP_EXECUTION |
做業步執行器表。用於存放每一個Step執行器的信息,好比做業步的開始時間、執行完成時間、執行狀態、讀/寫次數、跳過次數等。 |
BATCH_STEP_EXECUTION_CONTEXT |
做業步執行上下文表。用於存放每一個做業步的上下文信息。 |
BATCH_JOB_EXECUTION_CONTEXT |
做業執行上下文表。用於存放做業執行器上下文的信息。 |
BATCH_STEP_EXECUTION_SEQ |
做業步序列表。用於給表BATCH_STEP_EXECUTION和BATCH_STEP_EXECUTION_CONTEXT提供主鍵。 |
BATCH_JOB_EXECUTION_SEQ |
做業執行器序列表。用於給表BATCH_JOB_EXECUTION和BATCH_JOB_EXECUTION_CONTEXT提供主鍵。 |
BATCH_JOB_SEQ |
做業序列表。用於給表BATCH_JOB_INSTANCE和BATCH_JOB_EXECUTION_PARAMS提供主鍵。 |