【问题标题】:How to run spring batch jobs in parallel如何并行运行spring批处理作业
【发布时间】:2014-09-28 00:30:04
【问题描述】:

我有一个工作流程,我想按以下方式运行它:

Job1 -> Job2 -> Job3  
     -> Job4 -> Job5

作业流程将从 Job1 开始。 Job1 成功完成后,Job1 将同时启动 Job2 和 Job4。
Job2 和 Job4 将并行运行。
Job2 成功完成后,Job2 会启动 Job3。
Job4 成功完成后,Job4 将启动 Job5。

以下是job1.xml和Job1的job launcher类的sn-p代码:

job1.xml

<bean id="uiJobListener"
    class="com.joblaunch.UIJobListener">
    <property name="vmInfoImportUIBatchLauncher" ref="vmInfoImportUIBatchLauncher" />
    <property name="jobRepository" ref="jobRepository" />
</bean>

<bean id="uiBatchLauncher"
    class="com.joblaunch.UIBatchLauncher">
    <property name="simpleJobLauncher" ref="simpleJobLauncher" />
    <property name="jobLocator" ref="jobRegistry" />
    <property name="jobTwo" value="Job2" />
    <property name="jobFour" value="Job4" />
</bean>

<batch:job id="Job1" restartable="true">
    <batch:step id="stp01">
        <batch:tasklet ref="stp01Operator" />
        <batch:next on="COMPLETED" to="stp02" />
    </batch:step>

    <batch:step id="stp02">
        <batch:tasklet ref="stp02Result" />
    </batch:step>

    <batch:listeners>
        <batch:listener ref="uiJobListener" />
    </batch:listeners>
</batch:job>

UIJobLauncher.java

Job jobOne = jobLocator.getJob(jobTwo);
simpleJobLauncher.run(jobOne, builder.toJobParameters());

Job jobTwo = jobLocator.getJob(jobFour);
simpleJobLauncher.run(jobTwo, builder.toJobParameters());

问题

但是,当我启动 Job1 时,Job1 启动了 Job2,而 Job2 继续到 Job3。
Job3 完成后,Job1 启动 Job4,Job4 继续 Job5。

“Job2, Job3” 对和“Job4, Job5” 对没有并行运行。 虽然 Job1 启动了 Job4,但作业流程变成了如下:

Job1 -> Job2 -> Job3 -> Job4 -> Job5

那么,spring 批处理作业如何并行运行呢? 有没有办法从 Spring Batch Admin UI 和命令行并行运行 Spring Batch 作业?

【问题讨论】:

    标签: parallel-processing spring-batch


    【解决方案1】:

    不能按照您的要求自然地管理工作。
    您必须创建一个新的超级作业,并根据需要使用 'Split flow' 配置重定向作业。
    当然 split 适用于步骤而不是作业,但 SB 可以使用 JobStep
    将作业包装到步骤中 按照官方文档和关于网络拆分的示例,您应该能够毫无问题地解决您的问题

    【讨论】:

    • 如果将作业包装到步骤中,则该作业无法自行运行。那正确吗??如果是这样,我认为“JobStep”可能不太好,因为我还想不仅作为作业流程运行,而且还希望单独运行每个作业。有没有其他办法???
    • 作业可以像往常一样独立启动。当作业是复杂流程的一部分(如您的情况)时,JobStep 是重用作业定义的方法。除非您决定手动同步作业流程,否则如果没有 JobStep,您的要求将无法重现。
    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 2021-01-15
    • 2015-07-30
    • 2013-10-21
    • 1970-01-01
    • 2019-11-14
    • 2021-09-17
    • 2012-11-12
    相关资源
    最近更新 更多