我希望能够在达到计时阈值时停止工作。我正在考虑2种方法。首先是在afterStep中停止工作。但是,如果它在最后一步完成时,我不希望它具有“已停止”状态。因此,我要在beforeStep中停止它。
我尝试过
public void beforeStep(StepExecution stepExecution) {
stepExecution.setStatus(BatchStatus.STOPPED);
return;
}
和
public void beforeStep(StepExecution stepExecution) {
stepExecution.setExitStatus(ExitStatus.STOPPED);
return;
}
这些都不起作用。有什么建议么?
最佳答案
上面的代码的问题是停止当前正在运行的步骤,而不是整个作业。也许如果您在job-current-step配置中添加并调整以下代码,则当该步骤的ExitStatus为STOPPED时,该作业将终止,而再次运行时,该作业将从下一个步骤开始。(取自here)
<step id="step1" parent="s1">
<stop on="STOPPED" restart="step2"/>
</step>
This也可能有助于解决ExitStatus / BatchStatus之间的混淆。
关于时间阈值...据我所了解,到目前为止,无论先前步骤运行了多长时间,您都计划仅测量当前步骤的时间(之前-之后)。要计算和执行先前的步骤,请尝试在JobParameters中添加时间戳,并检查何时超过该阈值。