gpt4 book ai didi

java - Spring Batch - 使用 ExitStatus 进行流量控制

转载 作者:行者123 更新时间:2023-12-02 02:56:58 25 4
gpt4 key购买 nike

我有一个使用 spring-boot 的 Spring Batch 应用程序(无 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 返回任何特定值?

最佳答案

这里返回null实际上表示“不要覆盖您已经要使用的ExitStatus”。

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

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

或者,假设您希望有一个场景,您希望根据步骤中的 Activity 进行一些流程控制...也许这是一个暂存步骤,并且您希望在没有要处理的记录时结束,但是如果有记录要暂存,则需要执行一些额外的步骤。那么你可能会这样做:

@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();

关于java - Spring Batch - 使用 ExitStatus 进行流量控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42932121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com