來源: 北大青鳥 2015年08月04日 15:08
Spring Batch 2. 行話 每一個行業(yè)都有自己的行話,SpringBatch也不例外。 Job一個Job是用于封裝一整個批處理的實體。和其它Spring項目一樣,一個Job和一個XML配置文件相連。這個文件可能叫任務配置。無論如何,Job是整個層次結構的頂點。 一個Job就是一系列Step的容器。Job可以定義一些屬性,如是否可以重新執(zhí)行。Step會使用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> 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有如下屬性:
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有下面的一系列屬性。
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; }}ItemReaderItemReader用于抽象Step的輸入。當所有輸入讀完后返回null。 ItemWriter ItemWriter用于抽象Step的輸出,每次一條記錄。通常來說,ItemWriter并不知道下一條要處理什么,它只有當前的那條記錄。 ItemProcessor ItemProcessor用于抽象一條記錄的處理。ItemReader用于讀一條記錄,ItemWriter用于寫一條記錄,ItemProcessor用于應用業(yè)務邏輯,從一種格式到另一種格式。在處理過程中,返回null表示這條記錄不需要寫下來。 |