Spring Batch 核心概念

– Start
点击此处观看本系列配套视频。


在上个例子中,我们使用 XML 的方式定义了一个叫做 EndOfJob 的 Job,跑完 Job 后,试一试执行下面的 SQL 看看结果吧。

select * from BATCH_JOB_INSTANCE;
select * from BATCH_JOB_EXECUTION;
select * from BATCH_JOB_EXECUTION_PARAMS;
select * from BATCH_JOB_EXECUTION_CONTEXT;
select * from BATCH_STEP_EXECUTION;
select * from BATCH_STEP_EXECUTION_CONTEXT;

Job

Job 是 Spring Batch 的核心概念,它包含了批处理的所有操作,Spring 使用 batch:job 定义 Job

<batch:job id="EndOfJob" job-repository="jobRepository">
	<batch:step id="EndOfStep">
		<batch:tasklet ref="endOfTasklet"/>
	</batch:step>
</batch:job>

Step

每个 Job 由一个或多个 Step 组成。Spring 使用 batch:step 定义 Step。

Tasklet

每个 Step 由一个 Tasklet 组成,通常我们需要实现 Tasklet 接口来定义自己的 Tasklet。

JobRepository

从上面的代码片段可以看到,定义 Job 时,需要指定一个 JobRepository,用来存储 Job 在运行过程中的状态信息,为什么要存储状态信息呢?因为如果 Job 失败了,Spring 支持从失败的地方重新运行,而不是从头开始。事实上,如果你的 JobRepository 实例的名字是 jobRepository,不需要指定也可以,从而简化我们配置。

JobLauncher

看看下面的代码片段,JobLauncher 用来运行 Job

// job 和 job 参数
Map<String,JobParameter> parameters = new HashMap<>();
parameters.put("business_date", new JobParameter("20170505"));
JobParameters jobParameters = new JobParameters(parameters);
Job job = context.getBean(Job.class);

// 运行 job
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
jobLauncher.run(job, jobParameters);

通常我们都是通过命令行启动 Job,我们可以使用 CommandLineJobRunner

bash$ java CommandLineJobRunner D://EndOfJob.xml EndOfJob business_date=20170505

JobParameters

从上面的代码片段可以看到,运行 Job 时,我们可以给 Job 传递参数,参数会保存到 BATCH_JOB_EXECUTION_PARAMS 表中

JobInstance

当我们运行一个 Job 时,Spring 会根据 JobParameters 查询 BATCH_JOB_INSTANCE 表,如果不存在则插入一条数据,如果存在则说明是失败后重新运行,Spring 会根据表中的状态信息在失败的地方重新运行。如果我们重新运行一个已经成功的 Job 会怎么样呢?就向上个例子演示的那样,会抛异常。

JobExecution 和 ExecutionContext

每次运行 Job 时,Spring 都会往 BATCH_JOB_EXECUTION 表插入一个数据,保存 Job 开始,结束时间,状态等信息。
有时候我们需要在 Job 的执行过程中初始化并访问一些变量,因此每个 JobExecution 都有一个 ExecutionContext 对象,它其实就是一个 Map,存储在 BATCH_JOB_EXECUTION_CONTEXT 表中

StepExecution 和 ExecutionContext

每次运行 Step 时,Spring 都会往 BATCH_STEP_EXECUTION 表插入一个数据,保存 Step 开始,结束时间,状态等信息。
有时候我们需要在 Step 的执行过程中初始化并访问一些变量,因此每个 StepExecution 都有一个 ExecutionContext 对象,它其实就是一个 Map,存储在 BATCH_STEP_EXECUTION_CONTEXT 表中。
更多参见:Spring Batch 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-07-24
– Written by ShangBo on 2017-07-15
– End

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值