在jobExeuctionDecider之后执行Spring Batch(java-config)步骤

我正在尝试使用java-config在spring批处理中配置Flow,这个流程基本上必须这样做:

  1. 执行init步骤(在数据库中添加记录),

  2. 然后执行一个决策程序来检查文件是否存在,

2.1。 如果文件存在,它将执行加载作业(这是一个并行的一堆步骤的另一个流程)

  1. 执行完成步骤(在数据库中添加记录),即使2.1未执行,也应该始终运行。

我尝试进行此配置,但完成步骤永远不会运行:

Flow flow = new FlowBuilder("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("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来检测文件的呈现并触发作业。

下一个最简单的选项就是对文件进行石英或CRON作业检查并启动批处理作业。

最后但并非最不重要的是,您可以运行作业,如果ItemReader无法找到文件,则只需吞下该exception。 或者设置FileItemReader Listener以在方法之前检查文件。