持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
这篇文章我们来讲一下Spring Batch 中的Step 的概念。
Step 是什么
我们知道,Spring Batch 中最主要的两个概念就是Job 和Step。在了解了Spring 中Job 的概念之后,我们来讲一个Step。我们知道,Job 是一个Spring Batch 任务的概念的封装,而Step 封装的是批处理作业中的一个独立的执行阶段。
Job 是由一个或者多个Step 组成的,对于每个Step 来说,它包含了批处理的定义以及控制的所有信息,这些内容都是由开发者自行决定的。
对于每个Step 来说,他们的复杂度是不尽相同的。我们可以在其中定义复杂的业务逻辑,也可以仅仅做简单的控制台打印。所以说,Step 的自定义程度很高。类比于Job 之于JobExecution,Step 也有相关的StepExecution 的概念。
Job 以及Step 的相关的概念如下:
什么是 StepExecution
我们将StepExecution 与JobExecution 来做对比。JobExecution 代表的是每次Job 的执行;相对应,StepExecution 表示的是每次Step 的执行。在Step 每次执行的时候,Spring Batch 都会创建一个新的StepExecution,这类似于JobExecution 的实现。需要注意的是,step 和job 是有一定的区分的。因为job 是由多个step 构成的,所以就存在一种情况,在某个step 之前的一些step 执行失败导致当前的step 无法继续执行,那么就不会有stepExecution 产生。所以,只有在Step 实际启动的时候才会创建StepExecution。
对于每个Step 的执行,它都会包含一个ExecutionContext(执行上下文),它可以保存开发者在批处理过程中需要的数据。
什么是 ExecutionContext
ExecutionContext 的概念是之于StepExecution 的。它是每一个StepExecution 的执行环境的抽象。它本身也是一个类,在这个类中也会包含一系列的键值对。我们可以通过StepExecution 或者JobExecution 的实例来获取ExecutionContext 实例。代码如下:
ExecutionContext stepExecution = stepExecution.getExecutionContext();
ExecutionContext jobExecution = jobExecution.getExecutionContext();
总结
这篇文章主要介绍的是Step 的概念,同时也介绍了StepExecution 和ExecutionContext 的概念,读者可以很清晰地理解。