Spring Batch 的重要概念

230 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

Spring Batch 中有两个重要的概念:Job 和Step。Job 是由多个Step 组成的。Job 可以看做是Step 的容器。

我们先介绍Job 相关的概念

每次运行Job 的时候,都会有一个逻辑意义上的JobInstance。JobInstance 代表每次Job 运行的情况。

但是Job 有可能因为一些原因,比如说代码bug、网络抖动等原因导致的失败。用来区分同一个JobInstance 的不同运行批次,就需要引出JobParameters 的概念。

JobInstance = Job + JobParameters

还有另外一个JobExecution 的概念。它代表的是一个单次运行的一个定义好的Job 的代码层面的概念。

在JobExecution 中,有一个BatchStatus,它代表的是Job 运行的各个状态,也就是一个Job 的状态的枚举。

JobRepository 是将Job 和Step 进行持久化的一个类。它为Job / Step / JobLauncher 提供crud。

首次启动Job 的时候,会从Repository 中获取JobExecution。在执行的过程中,JobExecution 和StepExecution 都会被存入JobRepository 中。

JobLauncher 的作用就是用来启动指定了JobParameters 的Job。

Step 的相关概念

上面我们说了,Step 组成了Job。

对于Step 来说,它是一个批处理作业的独立阶段。每个Job 是由一个或者多个独立的Step 组成的。

对比于Job 来说,Step 也有StepExecution 的概念。对于每次Step 的执行,它的执行实例就是由StepExecution 对象来表示的。

ExecutionContext 是每个StepExecution 的执行环境,我们可以从ExecutionContext 中保存并获取需要的数据。

其他相关概念

ItemReader 是组成Step 的一部分,是“读取”的抽象。为每个Step 提供数据输入。当数据读入完成之后,将会返回null。

ItemWriter 同样也是组成Step 的一部分,它是写数据的抽象。它为每个Step 提供写服务,可以每次写一条数据,也可以控制每次写一个Chunk 的数据。

ItemProcessor 的作用是用来处理数据的。

对于上文所说的Chunk,我们可以在ItemWriter 中设置一个Chunk Size,当处理的数据到达这个size 的时候,它会批量一起进行commit。

总结

这篇文章主要内容就是介绍Spring Batch 的一些基本概念,作为一个入门。更细节的东西建议读者参考官方文档。