學AI,好工作 就找北大青鳥
關注小青 聽課做題,輕松學習
周一至周日
4000-9696-28

Spring Batch 2. 行話

來源: 北大青鳥 2015年08月04日 15:08

摘要: Spring Batch 2. 行話
Spring Batch 2. 行話
每一個行業(yè)都有自己的行話,SpringBatch也不例外。

Job一個Job是用于封裝一整個批處理的實體。和其它Spring項目一樣,一個Job和一個XML配置文件相連。這個文件可能叫任務配置。無論如何,Job是整個層次結構的頂點。

一個Job就是一系列Step的容器。Job可以定義一些屬性,如是否可以重新執(zhí)行。Step會使用Job定義的屬性。


Spring Batch 2. 行話

Job的定義包含下面幾個部分
? 一個簡單的名字
? 一系列步驟
? 是否支持重新執(zhí)行

SpringBatch提供一個基本的實現(xiàn)SimpleJob。可以用下面方式配置一個Job
Xml代碼 

  • <job id="footballJob">  

  •     <step id="playerload" next="gameLoad"/>  

  •     <step id="gameLoad" next="playerSummarization"/>  

  •     <step id="playerSummarization"/>  

  • </job>  


<job id="footballJob">    <step id="playerload" next="gameLoad"/>    <step id="gameLoad" next="playerSummarization"/>    <step id="playerSummarization"/></job>
JobInstance一個JobInstance就是一個Job的實例。一個Job的每次受調度都會產生一個JobInstance。假如我們配置一個每天都運行的任務。那么每天都會有一個JobInstance產生。1月1號會有一個JobInstance,1月2號會有一個。如果1月1號的那個JobInstance執(zhí)行失敗,再執(zhí)行一次并不會新產生一個JobInstance,還是1月1號的那個JobInstance。

一個JobInstance不和任何數(shù)據(jù)綁定。JobInstance只保存狀態(tài),如何加載數(shù)據(jù)完全由ItemReader的實現(xiàn)決定。 


JobParameters
JobParameters用于區(qū)分JobInstance。一個JobParameters是在開始一個Job時的一組參數(shù)。

在上圖的例子中,有兩個JobInstance,1月1號和1月2號。但是它們屬于同一個Job,所以我們可以說JobInstance = Job + JobParameters。

JobExecution
一個JobExecution就是一次真正意義上一次Job的執(zhí)行。一個JobInsntace可以有多個JobExecution,一個JobExecution的失敗并不意味這個JobInstance失敗。

一個Job定義這個Job該如何執(zhí)行。JobInstnace用于將一系列的JobExecution組織起來。JobExecution會將本次執(zhí)行的狀態(tài)記錄下來。

JobExecution有如下屬性:
  • status:本次執(zhí)行的狀態(tài),可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等

  • startTime:JobExecution執(zhí)行開始時間

  • endTime:JobExecution執(zhí)行的結束時間

  • exitStatus:JobExecution執(zhí)行的結果

  • createTime:JobExecution的生成時間。如果還沒有開始執(zhí)行那么就沒有startTime,但是createTime始終是有的。

  • lastUpdated:最后更新時間

  • executionContext:一個容器,用于執(zhí)行時需要保存的用戶數(shù)據(jù)。

  • failureExceptions:執(zhí)行時碰到的異常列表。有多個異常的導致失敗時會有用。


Step
每個Job包含一個或多個Step。一個Step包含實際執(zhí)行需要的信息。一個Step可以很簡單也業(yè)很復雜。一個簡單的Step可能不需要代碼或只要寫一點點代碼,如把數(shù)據(jù)從文件加載到數(shù)據(jù)庫中。和Job一樣,一個Step也有StepExecution的概念。如下圖所示,Job由Step組成,JobExecution由StepExecution組成。

StepExecution
StepExecution表示一個Step的執(zhí)行。 StepExecution只有在真正開始時才會生成,而不是JobExecution開始時就生成所有的StepExecution。StepExecution有對應的Step(可能只是名字?)和JobExecution的引用,以及和事務相關的數(shù)據(jù)。它還有一個ExecutionContext,用于保存用戶數(shù)據(jù)。

StepExecution有下面的一系列屬性。

  • status:本次執(zhí)行的狀態(tài),可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等

  • startTime:JobExecution執(zhí)行開始時間

  • endTime:JobExecution執(zhí)行的結束時間

  • exitStatus:JobExecution執(zhí)行的結果

  • createTime:JobExecution的生成時間。如果還沒有開始執(zhí)行那么就沒有startTime,但是createTime始終是有的。

  • executionContext:一個容器,用于執(zhí)行時需要保存的用戶數(shù)據(jù)。

  • failureExceptions:執(zhí)行時碰到的異常列表。有多個異常的導致失敗時會有用。

  • readCount:有少條記錄已經成功的讀了。

  • writeCount:有少條記錄已經成功的寫了。

  • commitCount:已經提交了多少次事務了。

  • rollbackCount:和Step相關的事物被回滾了多少次。

  • readSkipCount:讀跳過了多少次。resulting in a skipped item.?

  • processSkipCount:處理跳過了多少次。resulting in a skipped item.

  • filterCount:用ItemProcessor跳過了多少條記錄。

  • writeSkipCount:寫跳過了多少次。resulting in a skipped item.?

ExecutionContextExecutionContext是一系列的鍵/值對,由框架控制保存。它允許用戶保存StepExecution或JobExecution的狀態(tài)信息。ExecutionContext和Quartz的JobDataMap非常類似。使用ExecutionContext的最佳例子就是重試的輔助。以讀取文本文件為例,處理時可以將處理到哪一行記錄到ExecutionContext中,框架會把這些信息在檢入點永久保持起來。當失敗時可以從上次失敗的那個點開始重新運行。


JobRepository
JobRepository是上面所有東西的存儲機制。它為JobLauncher、Job和Step的實現(xiàn)提供了CRUD操作。當一個Job開始運行時,從JobRepository獲取一個JobExecution。在執(zhí)行階段StepExecution和JobExecution會保存到JobRepository中。

JobLauncher JobLauncher用于從JobRepository獲取JobExecution和執(zhí)行該JobExecution。接口定義如下。
Java代碼 

  • public interface JobLauncher {   

  •     public JobExecution run(Job job, JobParameters jobParameters)   

  •         throws JobExecutionAlreadyRunningException, JobRestartException;   

  •     }   

  • }  


public interface JobLauncher {    public JobExecution run(Job job, JobParameters jobParameters)        throws JobExecutionAlreadyRunningException, JobRestartException;    }}ItemReaderItemReader用于抽象Step的輸入。當所有輸入讀完后返回null。

ItemWriter
ItemWriter用于抽象Step的輸出,每次一條記錄。通常來說,ItemWriter并不知道下一條要處理什么,它只有當前的那條記錄。

ItemProcessor
ItemProcessor用于抽象一條記錄的處理。ItemReader用于讀一條記錄,ItemWriter用于寫一條記錄,ItemProcessor用于應用業(yè)務邏輯,從一種格式到另一種格式。在處理過程中,返回null表示這條記錄不需要寫下來。


熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應用線上班 即將爆滿
UI設計全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網絡安全運營班 爆滿開班
報名優(yōu)惠
免費試聽
課程資料
官方微信
返回頂部
培訓課程 熱門話題 站內鏈接