TL; DR:Spring Batch将始终创建新的作业执行,并且不会重复使用先前失败的作业执行来继续执行。
更长的答案:首先,您需要了解Spring Batch中的三个相似但不同的概念:作业,作业实例,作业执行
我总是用这个例子:
- 职位:日终批处理
- 作业实例:2018年1月1日的一天结束批次
- 作业执行:2018年1月1日的一天结束批次,执行#1
在较高级别,这就是Spring Batch的恢复工作方式:
假设您的第一次执行在步骤3中失败,则可以提交具有相同参数(2018-01-01)的相同作业(日末批)。Spring Batch将尝试查找提交的
作业实例* (2018-01-01的日间批处理)的最新 作业执行 (2018-01-01的日间批处理,执行#1
),并找到它之前在步骤3中失败。然后,Spring Batch将创建一个新的执行, [2018年1月1日的日末批次,执行#2] ,然后从步骤3开始执行。
* __
因此,根据设计,Spring尝试恢复的是先前失败的 作业实例
(而不是作业执行)。当您重新运行先前失败的执行时,Spring批处理将不会重复使用执行。



