SpringBatch(一):组件介绍
1、Job
Job可以理解是step的容器
2、JobInstance
指的是job运行当中,作业执行过程中的概念。可以理解为同一个job的不同实例
3、JobParameters
job运行时的参数
一个job可以对应多个jobInstance,jobParameters可以用来区别job的不同实例
JobInstance = Job + JobParameters
4、JobExecution
指的是单次尝试运行一个定义好的job的代码层面的概念
比如一个2021-09-13的jobInstance开始运行,可能成功也可能失败,但是只有成功的时候,这个instance才被视为完成
如果参数为2021-09-13的jobInstance运行失败了,此时如果使用和第一次运行参数一样的参数运行,就会创建一个对应于之前jobInstance的jobExecution实例,但是jobinstance仍然只有一个
5、step
每一个step对象都封装了批处理作业的一个独立阶段,可以理解为job运行的业务逻辑
6、stepExecution
stepExecution表示一次执行step,每次运行一个step都会创建一个新的stepExecution
某个step可能由于之前的step无法启动,仅当step实际启动时才会创建一个stepExecution
每个step执行都包含一个ExecutionContext,可以用来存储开发人员用到的数据
7、ExecutionContext
//是每一个stepExecution的执行环境,包含一些键值对
//可以用以下代码获取ExecutionContext
ExecutionContext ecStep = stepExecution.getExecutionContext();
ExecutionContext ecJob = jobExecution.getExecutionContext();
8、JobRepository
用于将job、step进行持久化的一个类,同时给job、step、jobLauncher实现提供CRUD操作
首次启动job时将从repository中获取JobExecution,并且在批处理执行过程中,stepExecution和jobExecution将被存储到repository中
9、jobLanucher
//用于启动指定了jobParamer的Job
public interface JobLauncher {
public JobExecution run(Job job, JobParameters jobParameters)
throws JobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}
//上面代码的意思是,根据传入的Job以及parpmers从jobRepository中获取一个Jobexecution并执行
10、Item Reader
是一个读数据的抽象,他的功能是为step提供数据输入
当读取完数据时,会返回null来告诉后续数据已经读完
springbatch为它提供了很多有用的实现类
11、Item Writer
一个写数据的抽,可以一次写一条,也可以用chunk一次插入多条
12、Item Processor
是对项目业务逻辑处理的一个抽象,当读到一条数据之后,在写之前,可以用Item Processor进行一个逻辑处理
13、chunk 处理器
可以用来配置当读取到chunk条数据时,将数据送到writer,transaction也会提交
14、skip策略和失败处理
skipLimit:表示可以跳过的异常数量
skip:可以指定可以跳过的异常
noSkip:表示不想跳过的异常
15、如何默认不启动job
在项目启动时会运行定义好的job,如果不想运行,需要在application.properties文件中配置
spring.batch.job.enabled=false
16、批处理流程举例
1、业务系统通过RPC接口将服务暴露给批量系统,服务逻辑是根据request里的jobname,用jobLanucher实现批量的启动
2、业务系统在批量运行前后,使用AOP在运行前记录开始时间,在运行后打印日志,并给批量系统发送MQ
3、批量系统调用分组批量的第一个批量,并配置MQ监听,当其他系统发送成功MQ标识过来,查询分组配置表继续通过RPC调起对应系统的批量