当“结束”被调用时,我有一个关于 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/