SpringBatch批处理框架架构
每个作业Job有1个或者多个作业步Step;
每个Step对应一个ItemReader、ItemProcessor、ItemWriter;
通过JobLauncher可以启动Job,启动Job时需要从JobRepository获取存在的JobExecution;
当前运行的Job及Step的结果及状态会保存在JobRepository中
SpringBatch中用到的主要领域对象
Job:作业。批处理中的核心概念,是Batch操作的基础单元。
Job Instance:作业实例。每个作业执行时,都会生成一个实例,实例会被存放在JobRepository中,如果作业失败,下次重新执行该作业的时候,会使用同一个作业实例;对于Job和Job Instance的关系,大家可以想象为Java类定义和Java对象实例的关系。
Job Parameters :作业参数。它是一组用来启动批处理任务的参数,在启动Job的时候,可以设置任何需要的作业参数,需要注意作业参数会用来标识作业实例,即不同的Job实例是通过Job参数来区分的。
Job Execution:作业执行器。其负责具体Job的执行,每次运行Job都会启动一个新的Job执行器。
Job Repository:作业仓库。其负责存储作业执行过程中的状态数据及结果。
Job Launcher:作业调度器。它会根据给定的JobParameters执行作业。
Step:作业步。Job的一个执行环节,多个或者一个Step组装成Job,封装了批处理任务中的一个独立的连续阶段。
Step Execution:作业步执行器。它负责具体step的执行,每次运行Step都会启动一个新的执行器。
Tasklet:Tasklet.Step中具体执行逻辑的操作,可以重复执行,可以设置具体的同步、异步操作等。
Execution Context:执行上下文。它是一组框架持久化与控制的key/value对,能够让开发者在Step Execution或Job Execution范畴保存需要进行持久化的状态。
Item:条目。一条数据记录。
Chunk:Item集合。它给定数量Item的集合,可以定义对Chunk的读操作、处理操作、写操作,提交间隔等。
Item Reader:条目读。其表示step读取数据,一次读取一条。
Item Processor:条目处理。用于表示item的业务处理。
Item Writer:条目写。用于表示step输出数据,一次输出一批。
命名空间
Job元素
批处理作业Job由一组Step组成,同时是作业配置文件的顶层元素。每个作业有自己的名字、可以定义Step执行的顺序,以及定义作业是否可以重启。
<batch:job id=""
abstract="true"
incrementer=""
job-repository=""
parent=""
restartable=""></batch:job>
Job执行的时候会生成一个Job Instance(作业实例),Job Instance包含执行Job期间产生的数据以及Job执行的状态信息等;Job Instance通过Job Name(作业名称)和Job Parameter(作业参数)来区分;每次Job执行的时候都有一个Job Execution(作业执行器),Job Execution负责具体job的执行。
Job、Job Instance和Job Execution三者的关系:
一个Job可能有一到多个Job Instance。
一个Job Instance可能有一个到多个Job Execution。
Job Instance
Job Instance(作业实例)是一个运行期的概念,Job每执行一次都会涉及一个Job Instance。Job Instance来源可能有两种:一种是根据设置的Job Parameters从Job Repository(作业仓库)中获取一个;如果根据Job Parameters从Job Repository没有获取Job Instance,则新创建一个新的Job Instance。
Job Parameters
Job 通过Job Parameters来区分不同的Job Instance。简单的说Job Name + Job Parameters来唯一的确定一个Job Instance。