Spring批处理作业链接执行不等待以前的作业在Jboss中完成

时间:2017-07-19 15:29:32

标签: spring jboss spring-batch taskmanager spring-batch-admin

我已按顺序链接了一组Spring批处理作业。

<batch:job id="rootJob">
   <batch:step id="rootJob.step1">
     <batch:job ref="externalJob1">
     <batch:next on="COMPLETE" to="rootJob.step2">
   </batch:step>

   <batch:split id="rootJob.step2">
     <batch:flow>
       <batch:step id="splitStep1">
         <batch:job ref="externalJob2">
       </batch:step>
     </batch:flow>
     <batch:flow>
       <batch:step id="splitStep2">
         <batch:job ref="externalJob3">
       </batch:step>
     </batch:flow>
     <batch:next on="COMPLETE" to="rootJob.step3">
   </batch:split>

   <batch:step id="rootJob.step3">
      <batch:job ref="externalJob4">     
   </batch:step>
 </batch:job>

对工作流程执行的期望。

1. On Completion of rootJob.step1 execute rootJob.step2.
2. Execute splitJob1 and splitJob2 in parallel.
3. On Completion of rootJob.step2 execute rootJob.step3

但是在Jboss中部署和触发时。流程未按预期执行。这些步骤将在单次拉伸中触发。执行不是等待上一步完成并立即启动。

我怀疑是TaskExecutor。在独立中,我们不指定任何任务执行程序(默认为 SyncTaskExecutor ),并且作业流程正常。但是当部署在Jboss中时,我们使用 SimpleAsyncTaskExecutor ,因为使用SyncTaskExecutor甚至不会在Jboss中触发作业。

我在这里缺少什么,或者我在这里做错了什么。请建议。

1 个答案:

答案 0 :(得分:0)

解决了这个问题。 我提供了工作启动器=&#34; jobLauncher&#34;物业如下。因此启动了单独的线程,并且作业并行触发。

$status

现在我已从所有作业中删除了joblauncher引用,并且作业按设计触发。