在開始作業流開發之前需要先了解SpringBatch中的BatchStatus和ExitStatus這兩個狀態的含義。
BatchStatus和ExitStatus含義
1.BatchStatus:批處理狀態
批處理狀態是由批處理框架使用,用來記錄Job、Step的執行情況。SpringBatch的重啟即是利用了BatchStauts來實現。對應BATCH_JOB_INSTANCE和BATCH_STEP_EXECUTION表中的STATUS字段值。
JobExecution.getStatus()獲取作業Job批處理狀態;
StepExecution.getStatus()獲取作業Step的批處理狀態;
批處理狀態屬性:
狀態 | 說明 |
---|---|
COMPLETED | 完成,所有Step都處理該狀態,則JOB會處理該狀態 |
STARTING | 表示作業正在啟動,還沒有啟動完畢 |
STARTED | 表示作業啟動完成 |
STOPING | 表示作業正在停止中 |
STOPED | 表示作業停止完成 |
FAILED | 表示作業執行失敗 |
ABANDONED | 表示當前下次重啟JOB時需要廢棄的Step,即不會被再次執行 |
UNKOWN | 表示未知錯誤,該狀態下重啟Job會拋錯 |
2.ExitStatus:退出狀態
退出狀態表示Step執行後或者Job執行後的狀態,該值要以被修改,通常用於條件Flow中。
可以通過攔截器StepExecutionListener的afterStep方法來修改退出狀態;
對應BATCH_JOB_INSTANCE和BATCH_STEP_EXECUTION表中的EXIT_CODE字段值;
順序Flow
順序Flow的配置非常簡單,通過next指向下一個步驟
示例:三個步驟,執行順序:step1.hello->step2.clean->step3.copyData
條件Flow
顧名思義,根據條件判斷來決定流程走向。通過listener的afterStep方法來設置ExitStatus狀態,XML中根據ExitStatus的值來決定流程走向。
示例:step1.hello運行結束後:
當ExistCode=T_FAILD,則執行step2.clean步驟;
當ExistCode為其它值時,則執行other步驟;
XML配置:
監聽開發
監聽非常重要,根據Step運行的結果來設置ExitStatus,next即是根據ExitStatus來判斷流程走向
注:通過stepExecution可以獲取Job的運行參數和Step的運行參數。
Launch啟動器
運行結果
當flowDeciderType參數值=true時
當flowDeciderType參數值=false時
更多SpringBatch開發文檔,移步到我的頭條號。
如果本文對您有用,請順手給個贊!