如何使JobExecutionDecider以成功的退出代码结束

时间:2012-01-19 21:07:11

标签: spring-batch

当调用“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");
}

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

1 个答案:

答案 0 :(得分:2)

CommandLineJobRunner使用SimpleJvmExitCodeMapper,而{{3}}只能理解

  • 完成
  • 失败
  • 找不到工作

我几乎可以肯定上面的配置会使作业状态为UNKNOWN,这将从exitCodeMapper处理,“不知道这个,我会返回1”(参见.intValue()方法)

但你可以提供自己的CommandLineJobrunner(只是扩展原来的)并为exitCodeMapper设置一个自己的实现