博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Batch 核心概念
阅读量:4049 次
发布时间:2019-05-25

本文共 2020 字,大约阅读时间需要 6 分钟。

– 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

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
parameters = new HashMap<>();parameters.put("business_date", new JobParameter("20170505"));JobParameters jobParameters = new JobParameters(parameters);Job job = context.getBean(Job.class);// 运行 jobJobLauncher 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 表中。
– 声 明:转载请注明出处
– Last Updated on 2017-07-24
– Written by ShangBo on 2017-07-15
– End

你可能感兴趣的文章
centos 7 上配置dnsmasq 同时支持ipv4和ipv6的DHCP服务
查看>>
AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动
查看>>
Android中AsyncTask的简单用法
查看>>
java反编译命令
查看>>
activemq依赖包获取
查看>>
概念区别
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>