Java 在春季批处理中停止beforeStep中的作业
我希望能够在达到计时阈值时停止作业。我考虑了两种方法。首先是在事后停止工作。但是,如果它在最后一步完成时,我不希望它具有停止状态。因此,我要在前面阻止它。 我试着用它做实验Java 在春季批处理中停止beforeStep中的作业,java,spring,spring-batch,Java,Spring,Spring Batch,我希望能够在达到计时阈值时停止作业。我考虑了两种方法。首先是在事后停止工作。但是,如果它在最后一步完成时,我不希望它具有停止状态。因此,我要在前面阻止它。 我试着用它做实验 public void beforeStep(StepExecution stepExecution) { stepExecution.setStatus(BatchStatus.STOPPED); return; } 及 这两个都不起作用。有什么建议吗?以上代码的问题是停止当前正在运行的步骤,而不是整个作
public void beforeStep(StepExecution stepExecution) {
stepExecution.setStatus(BatchStatus.STOPPED);
return;
}
及
这两个都不起作用。有什么建议吗?以上代码的问题是停止当前正在运行的步骤,而不是整个作业。如果在作业中添加并调整以下代码,当前步骤配置可能会在步骤的退出状态停止时终止作业,并且在再次运行时,作业将从下一步开始。摘自 还可能有助于解决ExitStatus/BatchStatus之间的混淆
关于时间阈值。。。据我所知,到目前为止,您计划只在“前步-后步”之前测量当前步骤的时间,而不管前面的步骤运行了多长时间。要计算和执行前面的步骤,请尝试在JobParameters中添加时间戳,并在超过阈值时进行检查。上述代码的问题在于停止当前正在运行的步骤,而不是整个作业。如果在作业中添加并调整以下代码,当前步骤配置可能会在步骤的退出状态停止时终止作业,并且在再次运行时,作业将从下一步开始。摘自 还可能有助于解决ExitStatus/BatchStatus之间的混淆
关于时间阈值。。。据我所知,到目前为止,您计划只在“前步-后步”之前测量当前步骤的时间,而不管前面的步骤运行了多长时间。要计算和执行前面的步骤,请尝试在JobParameters中添加一个时间戳,并检查该阈值是否已通过。我建议特别查看我建议特别查看您可以设置计时器或类似的设置,并在收到时间限制通知时停止作业,如中所述。
如果您希望作业正常完成,即使在上一步广播了时间警报,您也可以使用检查来查询作业进度。您可以设置计时器或类似的设置,并在收到时间限制通知时停止作业,如中所述。
如果您希望作业正常完成,即使在上一步广播了时间警报,您也可以使用check来查询作业进度。在我的情况下,需要从afterStep停止作业。所以我回到了ExitStatus。未知和从工作中得到的: 步骤,步骤结束 因此,作业将无错误地完成,我可以在需要时重新启动整个作业,而不需要重新启动选项
希望这能对您有所帮助。在我的情况下,需要在步骤结束后停止作业。所以我回到了ExitStatus。未知和从工作中得到的: 步骤,步骤结束 因此,作业将无错误地完成,我可以在需要时重新启动整个作业,而不需要重新启动选项 希望这能对你有所帮助。正确地看待这个问题,OP在他的问题中有解决方案 jobListener有点不同
@Override
public void beforeJob(JobExecution jobExecution) {
JobParameters jobParameters = jobExecution.getJobParameters();
//check params etc
if (!shouldExecute) {
jobExecution.stop();
jobExecution.setExitStatus(new ExitStatus("STOPPED", "Invalid state."));
return;
}
}
正确地看这个问题,OP在他的问题中有解决方案
jobListener有点不同
@Override
public void beforeJob(JobExecution jobExecution) {
JobParameters jobParameters = jobExecution.getJobParameters();
//check params etc
if (!shouldExecute) {
jobExecution.stop();
jobExecution.setExitStatus(new ExitStatus("STOPPED", "Invalid state."));
return;
}
}
@Override
public void beforeJob(JobExecution jobExecution) {
JobParameters jobParameters = jobExecution.getJobParameters();
//check params etc
if (!shouldExecute) {
jobExecution.stop();
jobExecution.setExitStatus(new ExitStatus("STOPPED", "Invalid state."));
return;
}
}