原文请参考spring batch reference 第三章
![](https://i-blog.csdnimg.cn/blog_migrate/01fe39c15a7218c297a825f07e5bdc59.png)
spring batch原型
spring batch 执行模型
Job 没有什么特别的含义,一个工作的代表,主要是有一个名字. 它是一个step的容器, 包含了一系列的step,形成一个流程。默认情况下job里的step按照定义的顺序执行.
![](https://i-blog.csdnimg.cn/blog_migrate/673f65ffd18e6f23f62a1fe32ea94d5b.png)
<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 参数.
![](https://i-blog.csdnimg.cn/blog_migrate/23718001af505f5ab4e05d8d44c58d86.png)
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
![](https://i-blog.csdnimg.cn/blog_migrate/37f87dd31f2ff2f21e88380e05bef2f5.png)
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>