nnt*_*nnt 4 parallel-processing spring-batch
我有一个工作流程,我想按以下方式运行它:
Job1 -> Job2 -> Job3
-> Job4 -> Job5
Run Code Online (Sandbox Code Playgroud)
作业流程将从Job1 开始。Job1 成功完成后,Job1 将启动 Job2 和 Job4。
Job2 和 Job4 将并行运行。
Job2成功完成后,Job2将启动Job3。
Job4成功完成后,Job4将启动Job5。
以下是 job1.xml 和 Job1 的作业启动器类的代码片段:
作业1.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>
Run Code Online (Sandbox Code Playgroud)
UIJobLauncher.java
Job jobOne = jobLocator.getJob(jobTwo);
simpleJobLauncher.run(jobOne, builder.toJobParameters());
Job jobTwo = jobLocator.getJob(jobFour);
simpleJobLauncher.run(jobTwo, builder.toJobParameters());
Run Code Online (Sandbox Code Playgroud)
问题
但是,当我启动 Job1 时,Job1 启动了 Job2,而 Job2 继续启动了 Job3。
Job3完成后,Job1启动Job4,Job4继续Job5。
“Job2, Job3”对和“Job4, Job5”对没有并行运行。虽然Job1启动了Job4,但作业流程如下:
Job1 -> Job2 -> Job3 -> Job4 -> Job5
Run Code Online (Sandbox Code Playgroud)
那么,Spring Batch 作业如何并行运行呢?有没有办法从 Spring Batch 管理 UI 和命令行并行运行 Spring Batch 作业?
工作不可能按照你的要求自然地进行管理。
您必须创建一个新的超级作业并根据您的喜好使用“拆分流”配置重定向作业。
当然 split 适用于步骤而不适用于作业,但是 SB 可以使用
Follow 官方文档和网上有关 split 的示例将作业包装到步骤中,您应该能够毫无问题地解决您的问题JobStep
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |