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

标签 java spring spring-batch spring-java-config

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

  1. 执行初始化步骤(在数据库中添加一条记录),

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

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();

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

    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/

相关文章:

java - Spring可运行jar在窗口上运行

java - Spring 批处理 : Reading data from one source but writing different data to 2 separate files

java - 如何在Spring Batch中读取多个CSV文件来合并数据进行处理?

java - 为什么我在死循环后不需要提供返回值?

java - Spring Boot Web应用程序错误: No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'dispatcherServlet'

HTML 中的 Java GB2312 字符串无法正确显示

java - 缺少工件 javax.transaction :jta:jar:1. 0.1B(问题不同,因为您可能会看到分辨率不同)

spring - 我应该在Spring Batch流程中的哪里索引项目?

java - 将使用 Jsp、Servlet 和 mySQL 构建的 Web 应用程序转换为使用 Spring 和 Hibernate 构建的 Web 应用程序很难吗?

java - JRuby 和 Swing 事件调度线程