当“结束”被调用时,我有一个关于 JobExecutionDecider 的退出代码的问题。我在 shell 脚本中使用 CommandLineJobRunner,我通过 $?指示被调用程序的退出状态。问题是,每当 JobExecutionDecider“结束”被调用时,退出状态总是设置为 1(失败)。当通过正常的“步骤”调用“结束”时,情况并非如此。在这些情况下,退出代码设置适当(即 0)。我尝试将退出代码的结束手动设置为“已完成”,结果与下图相同。

请注意,该决定实际上是一个“前置步骤”,并且是作业执行的第一件事。在决定结束处理的情况下,没有实际执行的“步骤”。

从 Spring 配置:

< job id="jobOne" />
 < decision id="myDecision" decider="myDecider">
  < end on="ABORT" exit-code="COMPLETED"/>
  < next on="CONTINUE" to="nextStep" />
 < /decision>

 < step id="stepOne" />
  < tasklet ref="myTasklet">
  ...

来自决策者:
public FlowExecutionStatus decide(JobExecution jobEx, StepExecution arg1) {
   if (abortExecution())
     return new FlowExecutionStatus("ABORT");

 return new FlowExecutionStatus("CONTINUE");
}

希望我提供了足够的信息。任何帮助,将不胜感激。谢谢。

最佳答案

CommandLineJobRunner 使用 SimpleJvmExitCodeMapper ,而 ojit_a 只能理解

  • 完成
  • 失败
  • 作业未找到

  • 而且我几乎可以肯定,上述配置使工作状态为 UNKNOWN,这将从 exitCodeMapper 中处理,并带有“不知道这一点,我将返回 1”(请参阅​​ .intValue() 方法)

    但是您可以提供自己的 CommandLineJobrunner(只需扩展原始的)并为 exitCodeMapper 设置自己的实现

    关于spring-batch - 如何使 JobExecutionDecider 以成功的退出代码结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8933285/

    10-12 20:29