在 Spring Batch 中的 beforeStep 中停止作业

Sea*_*ean 5 java spring spring-batch

我希望能够在达到时间阈值时停止作业。我正在考虑两种方法。首先是在 afterStep 中停止工作。但是,如果它在最后一步完成时,我不希望它具有已停止状态。因此,我将在 beforeStep 中停止它。

我尝试尝试

public void beforeStep(StepExecution stepExecution) {
    stepExecution.setStatus(BatchStatus.STOPPED);
    return;
}
Run Code Online (Sandbox Code Playgroud)

public void beforeStep(StepExecution stepExecution) {
    stepExecution.setExitStatus(ExitStatus.STOPPED);
    return;
}
Run Code Online (Sandbox Code Playgroud)

这些都不起作用。有什么建议么?

dim*_*zak 1

上面代码的问题是停止当前正在运行的步骤,而不是整个作业。

也许如果您在作业当前步骤配置中添加并调整以下代码,则当步骤的 ExitStatus 为 STOPPED 时,作业将终止作业,并且当再次运行时,作业将从下一步开始。
(摘自这里

<step id="step1" parent="s1">
    <stop on="STOPPED" restart="step2"/>
</step> 
Run Code Online (Sandbox Code Playgroud)


也可能有助于解决 ExitStatus/BatchStatus 之间的混淆。

关于计时阈值...据我所知,到目前为止,您计划仅测量当前步骤的时间(前一步 - 后一步),无论前面的步骤运行了多长时间。要计算前面的步骤,请尝试在 JobParameters 中添加时间戳并检查何时超过该阈值。