Spring Batch學習筆記三:JobRepository


此系列博客皆為學習Spring Batch時的一些筆記;

Spring Batch Job在運行時有很多元數據,這些元數據一般會被保存在內存或者數據庫中,由於Spring Batch在默認配置是使用HSQLDB,也就是說在Job的運行過程中,所有的元數據都被儲存在內存中,在Job結束后會隨着進程的結束自動消失;在這里我們推薦配置JobRepository去使用MySQL。

在這種情況下,Spring Batch在單次執行或者從一個執行到另外一個執行的時候會使用數據庫去維護狀態,Job執行的信息包括Job實例、傳入的參數、執行的結果、每一個Step執行的結果都會被存儲在數據庫中;數據庫使用了6個表來存儲相關信息:

BATCH_JOB_INSTANCE

我們都知道,在Job運行時,一個Job實例被創建;Job實例包含了Job實例它本身和Job參數;所有Job實例本身的信息將會被保存在BATCH_JOB_INSTANCE表中:

 字段 描述 
 JOB_INSTANCE_ID  表的主鍵
 VERSION  記錄的版本
 JOB_NAME  被執行JOB名
 JOB_KEY  Job名和Job參數的Hash值,被使用來唯一標示一個Job實例

BATCH_JOB_PARAMS

這個表包含了所有被傳遞到Job的參數,正如上面提到的,參數被Spring Batch使用來作為Job標示的一部分。這個表包含的字段如下:

 字段  描述
 JOB_INSTANCE_ID  表示BATCH_JOB_INSTANCE的外鍵
 TYPE_CD  表示被存儲的值的類型(string, date, long, double)
 KEY_NAME  Job參數的鍵(Job參數作為鍵值對被傳遞)
 STRING_VAL  當這個參數是string類型時的值
 DATE_VAL  日期型參數值
 LONG_VAL  長整型參數值
 DOUBLE_VAL  雙精度或者單精度型參數值

BATCH_JOB_EXECUTION和BATCH_STEP_EXECUTION

當一個Job被創建並執行時,這個Job的運行狀態被保存在BATCH_JOB_EXECUTION表中,其中包括:開始時間、結束時間、最近一次執行的結果;

BATCH_STEP_EXECUTION表和BATCH_JOB_EXECUTION差不多,它包含了每一個Step在執行過程中的開始時間、結束時間、commit的次數、Step狀態相關的參數;

BATCH_JOB_EXECUTION表的字段信息:

 字段  描述
 JOB_EXECUTION_ID  表的主鍵
 VERSION  記錄的版本
 JOB_INSTANCE_ID  到BATCH_JOB_INSTANCE表的外鍵
 CREATE_TIME  Job實例被創建的時間
 START_TIME  Job開始執行的時間
 END_TIME  Job執行結束的時間,不管成功與否
 STATUS  Job被執行的狀態
 EXIT_CODE  Job返回時的退出碼
 EXIT_MESSAGE  Job返回時的推出消息
 LAST_UPDATED  當前記錄上一次被更新的時間

 BATCH_STEP_EXECUTION表的字段信息:

 STEP_EXECUTION_ID  表的主鍵
 VERSION  記錄的版本
 STEP_NAME  被配置在Job xml中的Step的名字
 JOB_EXECUTION_ID  連接到BATCH_JOB_EXECUTION表的外鍵
 START_TIME  Step開始的時間
 END_TIME  Step完成的時間,無論成功與否
 STATUS  Step當前的狀態
 COMMIT_COUNT  當前Step被Commit的次數
 READ_COUNT  當前Step讀取數據庫的次數
 FILTER_COUNT  當前Step讀取到的item數量
 WRITE_COUNT  當前Step寫的Item數量
 READ_SKIP_COUNT  讀取Item時跳過的數量
 WRITE_SKIP_COUNT  寫Item時跳過的數量
 PROCESS_SKIP_COUNT  在ItemReader讀取后,沒有經過ItemProcessor處理的item的數量
 ROLLBACK_COUNT  在Step執行過程中,總的Rollback的數量
 EXIT_CODE  Step完成時返回的退出碼
 EXIT_MESSAGE  Step完成時返回的退出消息
 LAST_UPDATED  這條記錄上次被更新的時間

BATCH_JOB_EXECUTION_CONTEXT和BATCH_STEP_EXECUTION_CONTEXT

這是兩個Context相關的表,它們分別用於存儲Job或者Step相關的ExecutionContext的持久化版本,Spring Batch中的ExecutionContext類似於WEB應用程序中的Servlet Context或Session,它們都提供了一個存儲信息的全局空間,本質上是作用域在Job或者Step中的一個鍵值對;這個Job或者Step的ExecutionContext被用來在特定的作用域里面傳遞信息,如果是Job,它就用來在Step與Step之間傳遞信息,如果是Step,它用來在多個記錄的處理過程中傳遞信息。

表BATCH_JOB_EXECUTION_CONTEXT和BATCH_STEP_EXECUTION_CONTEXT是這些鍵值對的序列化版本,它們除了一個外鍵不同之外,其它幾乎都相同; 

 字段  描述
 JOB_EXECUTION_ID/STEP_EXECUTION_ID  引用自表BATCH_JOB_EXECUTION或BATCH_STEP_EXECUTION的外鍵
 SHORT_CONTEXT  Context的字符串表示
 SERIALIZED_CONTEXT  一個被序列化的ExecutionContext,以便在將來重試的時候使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM