Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在春季批处理中停止beforeStep中的作业_Java_Spring_Spring Batch - Fatal编程技术网

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;
        }
}