我正在尝试使用 java-config 在 spring batch 中配置 Flow, 这个流程基本上必须这样做:
执行初始化步骤(在数据库中添加一条记录),
然后执行决策程序来检查文件是否存在,
2.1。如果文件存在,它将执行加载作业(这是另一个具有一系列并行步骤的流程)
- 执行一个完成步骤(在数据库中添加一条记录),这应该始终运行,即使未执行 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 做出决定后执行步骤的正确方法是什么吗?
最佳答案
听起来这比需要的要复杂得多。您不需要配置流程或决策程序。这是一项非常简单的进出工作。
最简单的选择是使用 Spring Integration 来检测文件的存在并触发作业。
下一个最简单的选项就是让 quartz 或 CRON 作业检查文件并启动批处理作业。
最后但并非最不重要的一点是,您可以让作业运行,如果 ItemReader 找不到文件,则吞下异常。或者设置一个 FileItemReader 监听器来检查它的 before 方法上的文件。
关于java - Spring Batch(java-config)在 jobExeuctionDecider 之后执行步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725460/