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
我已经创建了一个 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