当调用“end on”时,我对JobExecutionDecider的退出代码有疑问。我在shell脚本中使用CommandLineJobRunner,我通过$获取退出代码?表示被调用程序的退出状态。问题是,每当JobExecutionDecider“end on”被调用时,退出状态总是设置为1(失败)。当通过正常的“步骤”调用“结束时间”时不是这种情况。在这些情况下,适当地设置退出代码(即0)。我已经尝试手动将退出代码的结尾设置为“COMPLETED”,其结果与下面显示的相同。
请注意,该决定实际上是“预备步骤”,并且是作业执行的第一件事。在决定结束处理的情况下,没有执行实际的“步骤”。
来自spring-config:
< 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");
}
希望我提供了足够的信息。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:2)
CommandLineJobRunner使用SimpleJvmExitCodeMapper,而{{3}}只能理解
我几乎可以肯定上面的配置会使作业状态为UNKNOWN,这将从exitCodeMapper处理,“不知道这个,我会返回1”(参见.intValue()方法)
但你可以提供自己的CommandLineJobrunner(只是扩展原来的)并为exitCodeMapper设置一个自己的实现