spring-boot - Spring Batch Conditional Flow - 第二个流总是进入状态 FAILED
问题描述
我创建了一个 Spring Batch 应用程序,我正在努力实现一个带有条件的简单流程。这是我想要实现的:
我试图实现这一点,实现以下代码:
@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 Batch 不允许流中的替代分支是隐式的。换句话说,您需要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
推荐阅读
- sql - 使用 Stack Exchange Data Explorer (SEDE) 按帖子计数和信誉查找用户
- firebase - 查询 firestore 以从 userid 获取所有令牌
- javascript - 使用 Webpack 进行新部署后处理丢失的动态块
- css - 没有样式的 Laravel 分页
- python - uwsgi+django:不支持的哈希类型
- c# - .net 4.5.2 和 ssl 3.0
- javascript - Javascript在同一页面的多个表中搜索
- typo3 - 带有 MenuProcessor 的面包屑中的 TYPO3 新闻标题
- odata - Uri 函数“包含”一个父令牌。Uri 函数不能有父标记
- csv - 向pyspark中的数据框添加唯一的连续行号