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

Dan*_*ehl 5 java spring spring-batch spring-java-config

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

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

  2. 然后执行一个decider来检查文件是否存在,

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

  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();
Run Code Online (Sandbox Code Playgroud)

我可以让它按照下面的方式工作,但它根本不优雅:

    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();
Run Code Online (Sandbox Code Playgroud)

有人知道在使用java-config做出决定后执行步骤的正确方法是什么?

Bri*_*anC 1

听起来这件事变得比实际需要的复杂得多。您不需要配置流程或决策程序。这是一项非常简单的进出工作。

最简单的选择是使用 Spring Integration 来检测文件的存在并触发作业。

下一个最简单的选项是使用quartz 或CRON 作业检查文件并启动批处理作业。

最后但并非最不重要的一点是,您可以运行作业,如果 ItemReader 找不到文件,只需吞掉异常即可。或者设置一个 FileItemReader 侦听器来检查其 before 方法上的文件。