原文請參考spring batch reference 第三章
Job 沒有什麼特別的含義,一個工作的代表,主要是有一個名字. 它是一個step的容器, 包含了一系列的step,形成一個流程。默認情況下job裏的step按照定義的順序執行.
<job id="footballJob"> <step id="playerload" next="gameLoad"/> <step id="gameLoad" next="playerSummarization"/> <step id="playerSummarization"/> </job>
job 參數, job啓動的時候需要附帶job參數,可以在後續的step中引用這些參數。 job參數決定了一個job 實例. 相同的job參數代表同一個job 實例. 同一個job實例在結束後一般是不能重啓的.所以一般啓動job的時候都將當前的時間作爲一個job 參數.
job 執行的信息. 包括job的狀體,開始時間. 結束時間,創建時間,最後更新時間等信息.
Table 3.3. BATCH_JOB_EXECUTION_PARAMS
JOB_EXECUTION_ID | TYPE_CD | KEY_NAME | DATE_VAL | IDENTIFYING |
1 | DATE | schedule.Date | 2008-01-01 | TRUE |
Table 3.4. BATCH_JOB_EXECUTION
JOB_EXEC_ID | JOB_INST_ID | START_TIME | END_TIME | STATUS |
1 | 1 | 2008-01-01 21:00 | 2008-01-01 21:30 | FAILED |
Table 3.6. BATCH_JOB_EXECUTION_PARAMS
JOB_EXECUTION_ID | TYPE_CD | KEY_NAME | DATE_VAL | IDENTIFYING |
1 | DATE | schedule.Date | 2008-01-01 00:00:00 | TRUE |
2 | DATE | schedule.Date | 2008-01-01 00:00:00 | TRUE |
3 | DATE | schedule.Date | 2008-01-02 00:00:00 | TRUE |
Table 3.7. BATCH_JOB_EXECUTION
JOB_EXEC_ID | JOB_INST_ID | START_TIME | END_TIME | STATUS |
1 | 1 | 2008-01-01 21:00 | 2008-01-01 21:30 | FAILED |
2 | 1 | 2008-01-02 21:00 | 2008-01-02 21:30 | COMPLETED |
3 | 2 | 2008-01-02 21:31 | 2008-01-02 22:29 | COMPLETED |
step是job裏邊具體做事的地方. step 包含一個tasklet. tasklet 可以是一個具體的java類,實現tasklet 接口. 也可以是一個chunk tasklet. chunk tasklet是一個tasklet末班類,包含了三個組件. item reader, item processor, item writer.. I
execution context 類似一個map 和 job parameters, 是在job的執行過程中傳遞上下文參數的。 ExecutionContext主要包括Job execution context 和 step execution context. job execution context類似與job parameter 在整個job中傳遞參數,後續的step可以引用這些參數. step execution context主要用在spring batch partition等高級應用中傳遞step信息. 我們可以在job的第一個step中從database中讀取job的配置參數,然後保存在job execution context. 也可以在某個step把一些參數放入job execution context 供後續step使用.
Table 3.11. BATCH_JOB_EXECUTION
JOB_EXEC_ID | JOB_INST_ID | START_TIME | END_TIME | STATUS |
1 | 1 | 2008-01-01 21:00 | 2008-01-01 21:30 | FAILED |
Table 3.12. BATCH_STEP_EXECUTION
STEP_EXEC_ID | JOB_EXEC_ID | STEP_NAME | START_TIME | END_TIME | STATUS |
1 | 1 | loadDate | 2008-01-01 21:00 | 2008-01-01 21:30 | FAILED |
ExecutionContext ecStep = stepExecution.getExecutionContext(); ExecutionContext ecJob = jobExecution.getExecutionContext();
spring job repository 顧名思義,用來創建,保存job執行信息的地方,可以是內存,也可以是database。 在實際應用中經常配一個datasource.
JobLauncher
啓動一個job, 附帶
JobParameters
: 經常引用一個job repository.
public interface JobLauncher { public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException; }
<beans:beans xmlns="http://www.springframework.org/schema/batch"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch-2.2.xsd">
<job id="ioSampleJob">
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
</tasklet>
</step>
</job>
</beans:beans>