我有一个包含三个步骤的 Spring Batch 工作。第一步运行一次,第二步和第三步针对队列中的每个项目运行。该工作的代码:
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.listener(jobListener())
.flow(step1())
.next(step2())
.next(encrypt()).on("CONTINUE")
.to(step2()).on("COMPLETED")
.end().end().build();
Run Code Online (Sandbox Code Playgroud)
用于重复步骤的步骤执行监听器:
@AfterStep
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
if (queue.size() > 0) {
return new ExitStatus("CONTINUE");
} else {
return new ExitStatus("COMPLETED");
}
}
Run Code Online (Sandbox Code Playgroud)
队列是自动连接的。
我的问题是,即使步骤完成时没有失败的退出状态,作业仍然以失败的退出状态结束。
我已经对其进行了调试,以查看作业是否因步骤以“COMPLETED”以外的退出状态完成而失败,但事实并非如此。
有任何想法吗?我认为这可能与其中一个步骤没有特定的听众有关,但我不知道那可能是什么。如果需要的话我可以发布更多代码。感谢所有帮助。
日志跟踪:
2017-05-18 10:08:10.327 [INFO ] c.d.r.r.BatchApplication - Starting BatchApplication on <computer_name> with PID <pid>
2017-05-18 10:08:10.329 [DEBUG] c.d.r.r.BatchApplication - Running with Spring Boot v1.4.1.RELEASE, Spring v4.3.3.RELEASE
2017-05-18 10:08:10.330 [INFO ] c.d.r.r.BatchApplication - The following profiles are active: <profile> …Run Code Online (Sandbox Code Playgroud)