【问题标题】:Stopping a Job in the beforeStep in Spring Batch在 Spring Batch 的 beforeStep 中停止作业
【发布时间】:2014-03-01 23:57:37
【问题描述】:

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

我尝试过

public void beforeStep(StepExecution stepExecution) {
    stepExecution.setStatus(BatchStatus.STOPPED);
    return;
}

public void beforeStep(StepExecution stepExecution) {
    stepExecution.setExitStatus(ExitStatus.STOPPED);
    return;
}

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

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

    请看这个问题here,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;
            }
    }
    

    【讨论】:

      【解决方案2】:

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

      也许如果您在作业当前步骤配置中添加和调整以下代码将终止作业时该步骤的 ExitStatus 已停止,再次运行时,作业将从下一步开始。
      (取自here

      <step id="step1" parent="s1">
          <stop on="STOPPED" restart="step2"/>
      </step> 
      


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

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

      【讨论】:

        【解决方案3】:

        在我的情况下,需要从 afterStep 停止工作。所以我返回了 ExitStatus.Unknown 并从这样的工作中捕获:

        step().on("未知").end()

        所以作业完成没有错误,我可以在需要时重新启动整个作业,没有“可重新启动”选项。

        希望对你有帮助。

        【讨论】:

          【解决方案4】:

          我建议查看CompletionPolicies,尤其是TimeoutTerminationPolicy

          【讨论】:

            【解决方案5】:

            您可以设置一个计时器(或类似的东西),并在收到时间限制通知时停止作业,如Stopping a job 中所述。
            如果您希望作业正常完成,即使在上一步广播了时间警报,您可以检查(使用JobOperator)来查询作业进度。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-06-10
              • 1970-01-01
              • 2021-06-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-05-29
              相关资源
              最近更新 更多