天天看點

Spring Batch重試(restart)原理

儲存中繼資料的表

batch_job_execution
batch_job_execution_context
batch_job_execution_params
batch_job_execution_seq
batch_job_instance
batch_job_seq
batch_step_execution
batch_step_execution_context
batch_step_executon_seq

restart會用到的三張表

batch_job_instance           執行個體ID 和 job 名字
batch_job_execution          job執行情況
batch_job_execution_params   job每次執行啟動的參數
           

JobInstance

  • Job 執行個體
spring batch 通過 job id 和 啟動參數 來唯一确定一個job 執行個體
如果同一個job 啟動參數有變化,會重新建立一個job執行個體。
參數沒有變化,job重新啟動,重新建立一個 jobExection 記錄執行情況。
           

JobParameters

  • Job 啟動參數:用來唯一确定一個 jobInstance

JobExecution

  • Job 執行情況:記錄每個jobInstance的每次執行情況

restart 執行個體 表資料的變化

重新開機一個失敗的job ,讓job 能夠最終完成。
系統要重新開機某個特定失敗的job, 得從batch_job_execution_params 查到當時的參數,以此為依據啟動job。

假設日終處理_結息任務,在6月1号晚上10點開始,10:30前結束,但是job 失敗了
此時表中資料應該是:

batch_job_instance :有一個名字為 日終處理_結息任務的Job 執行個體。(一條記錄)
batch_job_execution  :有個開始時間為 XXXX-06-01 22:00 結束時間為XXXX-06-01 22:30  狀态為 FAILED 的執行情況記錄。(一條記錄)
batch_job_execution_params: 該失敗執行個體的第一次執行的參數。
           
Spring Batch重試(restart)原理
因為 該任務是定時任務,是以在當天特定時刻 再次執行同樣參數的job 以便重新開機1号的job, 讓其成功。

這個時候表中資料應該為:

batch_job_instance :不變,依然為當時的執行個體(參數沒發生變化)
batch_job_execution :新增一條,start_time不變與上一次執行開始時間一緻,end_time改變(為此次執行結束時間),status為完成 COMPLETED
batch_job_execution_params: 新增一條與上一條一模一樣的記錄
           
Spring Batch重試(restart)原理

繼續閱讀