我有一个使用spring的spring批处理应用程序(没有xml配置)。我试图理解ExitStatus在我的应用程序中的有用性。在其中一个步骤的末尾,我需要执行一个SQL语句。我通过如下所示的StepExecutionListener来实现这一点:
@Component
public class MyListener extends StepListenerSupport{
@Autowired
JdbcTemplate jdbcTemplate;
@Transactional
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
jdbcTemplate.execute("some SQL update);
return null;
}
}如您所见,我将null返回为ExitStatus,这似乎很好。但是,我不确定这是否是正确的做法,还是需要返回ExitStatus的任何特定值?
发布于 2017-03-21 20:33:05
返回这里的null有效地说“不要覆盖您将要使用的ExitStatus”。
之所以有用,是因为如果SQL语句失败(并可能引发异常),则该步骤不会失败。相反,它将继续愉快地进行到你工作的下一步。
您需要捕获异常并返回ExitStatus.FAILED以失败步骤和作业。
或者,假设您希望有一个场景,其中您希望根据步骤中的活动执行一些流控制.也许这是一个暂放步骤,如果没有要处理的记录,您想要结束,但是如果有要处理的记录,则执行一些附加步骤。然后你可能会做这样的事情:
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
if (stepExecution.getReadCount() > 0) {
return ExitStatus.COMPLETED;
}
return ExitStatus.NOOP;
}然后,在您的职务配置中,您可以这样做:
jobBuilderFactory.get("myJob")
.start(step1()).on("NOOP").end()
.from(step1()).on("COMPLETED").to(step2()).end()
.from(step1()).on("*").fail()
.build();https://stackoverflow.com/questions/42932121
复制相似问题