一个 Job 是我们运行的基本单位, 它内部由 Step 组成. 本质上可以看成 Step 的一个容器
一个 Job 可以按照指定的逻辑顺序组合 Step, 并提供给所有 Step 设置相同属性的方法, 例如事件监听, 跳过策略
ItemReader: ItemReader 是一个读数据的抽象, 它的功能是为每一个 Step 提供数据输入. 当 ItemReader 以及读完所有数据时, 它会返回 null 来告诉后续操作数据已经读完. SpringBatch 为 ItemReader 提供了非常多的有用的实现类, 比如 JdbcPagingItemReader, JdbcCursorItemReader etc.
ItemReader 支持的读入的数据源也是非常丰富的: 包括各种类型的数据库, 文件, 数据流, 等等. 几乎涵盖了我们的所有场景
ItemProcessor: ItemProcessor 对项目的业务逻辑处理的一个抽象. 当ItemReader 读取到一条记录之后, ItemWriter 还未写入这条记录之前, 我们可以借助 ItemProcessor 提供一个处理业务逻辑的功能, 并对数据进行相应操作. 如果我们在 ItemProcessor 发现一条数据不应该被写入, 可以通过返回 null 来表示. ItemProcessor 和 ItemReader 以及 ItemWriter 可以非常好的结合在一起工作, 他们之间的数据传输也非常方便
ItemWriter: 一个写数据的抽象. 它是为每一个 Step 提供数据写出的功能. 写的单位是可以配置的, 可以一次写一条数据, 也可以一次写一个 chunk 的数据, ItemWriter 对于读入的数据是不能做任何操作的
SpringBatch 为 ItemWriter 也提供了非常多的有用的实现类, 当然我们也可以去实现自己的 writer 功能
每一个 Step 对象都封装了批处理作业的一个独立的阶段
事实上, 每一个 Job 本质上都是由一个或多个步骤组成. 每一个 Step 包含定义和控制实际批处理所需的所有信息. 任何特定的内容都由编写 Job 的开发人员自行决定. 一个 Step 可以非常简单也可以非常复杂. 例如, 一个 Step 的功能是将文件中的数据加载到数据库中, 那么基于现在 SpringBatch 的支持则几乎不需要写代码. 更复杂的 Step 可能具有复杂的业务逻辑, 这些逻辑作为处理的一部分. 与 Job 一样, Step 具有与 JobExecution 类似的 StepExecution
StepExecution
StepExecution 表示一次执行 Step. 每次运行一个 Step 时都会创建一个新的 StepExecution, 类似于 JobExecution. 但是, 某个步骤可能由于其之前的步骤失败而无法执行. 且仅当 Step 实际启动时才会创建 StepExecution
一次 Step 执行的实例由 StepExecution 类的对象表示. 每个 StepExecution 都包含对其相应步骤的引用以及 JobExecution 和事务相关的数据, 例如提交和回滚计数以及开始和结束时间. 此外, 每个步骤执行都包含一个 ExecutionContext, 其中包含开发人员需要在批处理运行中保留的任何数据, 例如重新启动所需的统计信息或状态信息