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调起对应系统的批量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现