首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧批量--使用ExitStatus进行流量控制

弹簧批量--使用ExitStatus进行流量控制
EN

Stack Overflow用户
提问于 2017-03-21 15:55:10
回答 1查看 2.5K关注 0票数 0

我有一个使用spring的spring批处理应用程序(没有xml配置)。我试图理解ExitStatus在我的应用程序中的有用性。在其中一个步骤的末尾,我需要执行一个SQL语句。我通过如下所示的StepExecutionListener来实现这一点:

代码语言:javascript
复制
@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的任何特定值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 20:33:05

返回这里的null有效地说“不要覆盖您将要使用的ExitStatus”。

之所以有用,是因为如果SQL语句失败(并可能引发异常),则该步骤不会失败。相反,它将继续愉快地进行到你工作的下一步。

您需要捕获异常并返回ExitStatus.FAILED以失败步骤和作业。

或者,假设您希望有一个场景,其中您希望根据步骤中的活动执行一些流控制.也许这是一个暂放步骤,如果没有要处理的记录,您想要结束,但是如果有要处理的记录,则执行一些附加步骤。然后你可能会做这样的事情:

代码语言:javascript
复制
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    if (stepExecution.getReadCount() > 0) {
        return ExitStatus.COMPLETED;
    }
    return ExitStatus.NOOP;
}

然后,在您的职务配置中,您可以这样做:

代码语言:javascript
复制
jobBuilderFactory.get("myJob")
            .start(step1()).on("NOOP").end()
            .from(step1()).on("COMPLETED").to(step2()).end()
            .from(step1()).on("*").fail()
            .build();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42932121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档