一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring Batch 2. 行話 - 而立未立 - JavaEye技術(shù)網(wǎng)站

 lylf615 2010-09-21

Spring Batch 2. 行話

 

每一個(gè)行業(yè)都有自己的行話,SpringBatch也不例外。

 

Job

一個(gè)Job是用于封裝一整個(gè)批處理的實(shí)體。和其它Spring項(xiàng)目一樣,一個(gè)Job和一個(gè)XML配置文件相連。這個(gè)文件可能叫任務(wù)配置。無(wú)論如何,Job是整個(gè)層次結(jié)構(gòu)的頂點(diǎn)。

 

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

 

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

 

SpringBatch提供一個(gè)基本的實(shí)現(xiàn)SimpleJob??梢杂孟旅娣绞脚渲靡粋€(gè)Job

Xml代碼 復(fù)制代碼
  1. <job id="footballJob">  
  2.     <step id="playerload" next="gameLoad"/>  
  3.     <step id="gameLoad" next="playerSummarization"/>  
  4.     <step id="playerSummarization"/>  
  5. </job>  

 

JobInstance

一個(gè)JobInstance就是一個(gè)Job的實(shí)例。一個(gè)Job的每次受調(diào)度都會(huì)產(chǎn)生一個(gè)JobInstance。假如我們配置一個(gè)每天都運(yùn)行的任務(wù)。那么每天都會(huì)有一個(gè)JobInstance產(chǎn)生。1月1號(hào)會(huì)有一個(gè)JobInstance,1月2號(hào)會(huì)有一個(gè)。如果1月1號(hào)的那個(gè)JobInstance執(zhí)行失敗,再執(zhí)行一次并不會(huì)新產(chǎn)生一個(gè)JobInstance,還是1月1號(hào)的那個(gè)JobInstance。


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

 

 

JobParameters


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

在上圖的例子中,有兩個(gè)JobInstance,1月1號(hào)和1月2號(hào)。但是它們屬于同一個(gè)Job,所以我們可以說(shuō)JobInstance = Job + JobParameters。

 

JobExecution


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

 

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

 

JobExecution有如下屬性:

  • status:本次執(zhí)行的狀態(tài),可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等
  • startTime:JobExecution執(zhí)行開(kāi)始時(shí)間
  • endTime:JobExecution執(zhí)行的結(jié)束時(shí)間
  • exitStatus:JobExecution執(zhí)行的結(jié)果
  • createTime:JobExecution的生成時(shí)間。如果還沒(méi)有開(kāi)始執(zhí)行那么就沒(méi)有startTime,但是createTime始終是有的。
  • lastUpdated:最后更新時(shí)間
  • executionContext:一個(gè)容器,用于執(zhí)行時(shí)需要保存的用戶數(shù)據(jù)。
  • failureExceptions:執(zhí)行時(shí)碰到的異常列表。有多個(gè)異常的導(dǎo)致失敗時(shí)會(huì)有用。

 

Step


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

StepExecution


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

 

StepExecution有下面的一系列屬性。

 

  • status:本次執(zhí)行的狀態(tài),可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等
  • startTime:JobExecution執(zhí)行開(kāi)始時(shí)間
  • endTime:JobExecution執(zhí)行的結(jié)束時(shí)間
  • exitStatus:JobExecution執(zhí)行的結(jié)果
  • createTime:JobExecution的生成時(shí)間。如果還沒(méi)有開(kāi)始執(zhí)行那么就沒(méi)有startTime,但是createTime始終是有的。
  • executionContext:一個(gè)容器,用于執(zhí)行時(shí)需要保存的用戶數(shù)據(jù)。
  • failureExceptions:執(zhí)行時(shí)碰到的異常列表。有多個(gè)異常的導(dǎo)致失敗時(shí)會(huì)有用。
  • readCount:有少條記錄已經(jīng)成功的讀了。
  • writeCount:有少條記錄已經(jīng)成功的寫(xiě)了。
  • commitCount:已經(jīng)提交了多少次事務(wù)了。
  • rollbackCount:和Step相關(guān)的事物被回滾了多少次。
  • readSkipCount:讀跳過(guò)了多少次。resulting in a skipped item.?
  • processSkipCount:處理跳過(guò)了多少次。resulting in a skipped item.
  • filterCount:用ItemProcessor跳過(guò)了多少條記錄。
  • writeSkipCount:寫(xiě)跳過(guò)了多少次。resulting in a skipped item.?

ExecutionContext

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

 

 

JobRepository


JobRepository是上面所有東西的存儲(chǔ)機(jī)制。它為JobLauncher、Job和Step的實(shí)現(xiàn)提供了CRUD操作。當(dāng)一個(gè)Job開(kāi)始運(yùn)行時(shí),從JobRepository獲取一個(gè)JobExecution。在執(zhí)行階段StepExecution和JobExecution會(huì)保存到JobRepository中。

 

JobLauncher

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

Java代碼 復(fù)制代碼
  1. public interface JobLauncher {   
  2.     public JobExecution run(Job job, JobParameters jobParameters)   
  3.         throws JobExecutionAlreadyRunningException, JobRestartException;   
  4.     }   
  5. }  

ItemReader

ItemReader用于抽象Step的輸入。當(dāng)所有輸入讀完后返回null。

 

ItemWriter


ItemWriter用于抽象Step的輸出,每次一條記錄。通常來(lái)說(shuō),ItemWriter并不知道下一條要處理什么,它只有當(dāng)前的那條記錄。

 

ItemProcessor

 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多