如何并行运行spring批处理作业

时间:2014-08-05 11:02:35

标签: parallel-processing spring-batch

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

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

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

以下是Job1.xml的代码片段和Job1的作业启动器类:

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。

&#34; Job2,Job3&#34;对和&#34; Job4,Job5&#34;对没有并行运行。 虽然Job1启动了Job4,但工作流程如下:

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

那么,弹簧批处理作业如何并行运行? 有没有办法从Spring Batch Admin UI和Command Line并行运行spring批处理作业?

1 个答案:

答案 0 :(得分:2)

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