系列文章目录
目录
本系列文章会对springbatch进行源码解析,如有错误请指出,会做出及时修正,感谢指正!
一、SpringBatch是什么
引用官方文档的解释:
Spring Batch是一个轻量级的,全面的批处理框架,旨在支持开发对于企业系统的日常运营至关重要的强大的批处理应用程序。Spring Batch建立在人们期望的Spring框架特性(生产力,基于POJO的开发方法和普遍的易用性)的基础上,同时使开发人员在必要时可以轻松访问和利用更高级的企业服务。Spring Batch不是一个调度框架。商业空间和开放源代码空间中都有许多好的企业调度程序(例如Quartz,Tivoli,Control-M等)。它旨在与计划程序一起工作,而不是替换计划程序。
根据上面的描述,需要注意一个点,SpringBatch是批处理框架,不是调度框架。其主要功能是支持企业级的批应用处理,使其能够借用Spring框架的特点,便于开发人员的使用。除此之外,SpringBatch还支持日志记录/跟踪,事务管理,作业处理统计信息,作业重启,跳过和资源管理等可重用功能。
使用场景:
- 定期提交批处理
- 并发批处理:作业的并行处理
- 分阶段的企业消息驱动的处理
- 大规模并行批处理
- 失败后手动或计划重启
- 顺序处理相关步骤(扩展了工作流程驱动的批次)
- 部分处理:跳过记录(例如,回滚时)
- 整批交易,适用于小批量或现有存储过程/脚本的情况
SpringBatch架构
这种分层的体系结构突出了三个主要的高级组件:Application, Core, 和Infrastructure。Application 包含所有批处理作业和开发人员使用Spring Batch编写的自定义代码。Core包含启动和控制批处理作业所需的核心运行时类,它包括实现 JobLauncher
,Job
和Step
。Application和Core都建立在Infrastructure之上。Infrastructure包含公用的读取器和写入器以及服务(例如RetryTemplate
),应用程序开发人员和核心框架本身都使用它。
二、SpringBatch原型
上图即SpringBatch的原型,从中可以看出构成Spring Batch的核心概念。Job是SpringBatch批处理的基本单位,每个Job有一个或者多个Step,但每个Step只有一个ItemReader
,一个ItemProcessor
和一个ItemWriter。每个Job
需要通过JobLauncher启动,并且关于当前运行进程的元数据需要存储在JobRepository中。
三、SpringBatch核心概念介绍
带 * 的属于核心概念,否则属于高级扩展的功能概念
1、*Job
Job
是封装整个批处理过程的实体。与其他Spring项目一样,Job
与XML配置文件或基于Java的配置连接在一起,该配置可以被称为“Job configuration”。但是, Job
这只是整个层次结构的顶部,如下图所示:
在Spring Batch中,Job
只是Step
实例的容器。它组合了逻辑上属于流程的多个Step,并允许配置所有Step全局的属性,例如可重新启动性。
Job只是SpringBatch提供的一个Job接口,另外,SpringBatch还提供了一个Job的简单实现类SimpleJob,在此类上创建了一些标准功能。SimpleJob继承于AbstractJob,而AbstractJob是Job的简单实现类。使用基于Java的配置时,可使用一组构建器来实例化一个Job
,如以下示例所示:
@Bean
public Job footballJob() {
return this.jobBuilderFactory.get("footballJob")
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.end()
.build();
}
2、*JobInstance
JobInstance是指逻辑作业运行的概念,相当于Job的实例。假设一个批处理任务,每天需要执行一遍,每天的日期作为参数(即后面说到的JobParameters),那么,昨天和今天的批处理任务虽然是同一个Job,但是因为JobParameters不同,分属于两个JobInstance,而我们必须记录job的每次运行的情况。其中SpringBatch会通过表BATCH_JOB_INSTANCE记录了JobInstance的详细情况。