Spring 批处理条件流 - 第二个流总是进入失败状态

Spring Batch Conditional Flow - The second flow always goes into status FAILED

我已经创建了一个 Spring 批处理应用程序,但我正在努力实现一个带有条件的简单流程。这是我想要实现的:

我尝试通过以下代码实现这一点:

@Bean
public Job job(JobCompletionNotificationListener listener) {
    return jobs.get(Constants.JOB_SIARD_FILES_PROCESSOR + new Date().getTime())
        .incrementer(new RunIdIncrementer())
        .listener(listener)
        .start(step1())
        .next(decider()).on("yes").to(step2345Flow())
        .end()
        .build();
}

@Bean
public Flow step2345Flow() {
    return new FlowBuilder<SimpleFlow>("yes_flow")
        .start(step2())
        .next(step3())
        .next(step4())
        .next(step5())
        .build();
}

当条件为“是”时,流程运行得很好,但当条件为“否”时,流程总是以执行状态“失败”结束。我希望它像第一个流程一样“完成”,但不执行步骤 2、3、4 和 5。

希望有人能帮助我。

Spring 批处理不允许流中的替代分支是隐式的。换句话说,每个案例都需要 on(...)

假设 decider() 产生一个代理 bean,它应该与

一起工作
@Bean
public Job job(JobCompletionNotificationListener listener) {
    return jobs.get(Constants.JOB_SIARD_FILES_PROCESSOR + new Date().getTime())
        .incrementer(new RunIdIncrementer())
        .listener(listener)
        .start(step1())
        .next(decider()).on("yes").to(step2345Flow())
        .from(decider()).on("no").end()
        .end()
        .build();
}

为了真正涵盖所有情况,您还可以使用 on("*") 而不是 on("no")

也请再看看官方文档:https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/index-single.html#controllingStepFlow