我正在尝试使用java-config在spring批处理中配置Flow, 这个流程基本上必须这样做:
执行init步骤(在数据库中添加记录),
然后执行决策程序以检查文件是否存在,
2.1。如果文件存在,它将执行加载作业(这是另一个并行执行大量步骤的流程)
我尝试进行此配置,但完成步骤永远不会运行:
Flow flow = new FlowBuilder<SimpleFlow>("commonFlow")
.start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build())
.next(decider)
.on(FlowExecutionStatus.COMPLETED.getName())
.to(splitFlow)
.from(decider).on("*")
.end()
.next(stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build())
.end();
我能够按照以下方式使其工作,但它根本不优雅:
Step finishStep = stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build();
Flow flow = new FlowBuilder<SimpleFlow>("commonFlow")
.start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build())
.next(decider)
.on(FlowExecutionStatus.COMPLETED.getName())
.to(splitFlow)
.next(finishStep)
.from(decider).on("*")
.to(finishStep)
.end();
有人知道在使用java-config做出决定后执行步骤的正确方法是什么?
答案 0 :(得分:1)
听起来这比实际需要的要复杂得多。您无需配置流程或决策程序。这是一个非常简单的进出工作。
最简单的选择是使用Spring Integration来检测文件的呈现并触发作业。
下一个最简单的选项就是对文件进行石英或CRON作业检查并启动批处理作业。
最后但并非最不重要的是,您可以让作业运行,如果ItemReader无法找到文件,则只需吞下例外。或者设置一个FileItemReader Listener来检查方法之前的文件。
答案 1 :(得分:0)
您可以使用两个单独的流程来实现这一点。
Flow flowWithDecider = new FlowBuilder<SimpleFlow>("flow-with-decider")
.start(decider)
.on("ok")
.to(okStep1)
.next(okStep2)
.from(decider)
.on("failed")
.to(failedStep)
.build()
Flow commonFlow = new FlowBuilder<SimpleFlow>("common-flow")
.start(commonStep)
.build()
Job job = jobs
.get("my-job")
.start(flowWithDecider())
.next(commonFlow()) // this will execute after the previous flow, regardless of the decision
.end()
.build();