当前位置: 首页 > 知识库问答 >
问题:

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

石俊雄
2023-03-14

我已经在一个订单中链接了一组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

我怀疑任务执行者。在独立的情况下,我们不指定任何任务执行器(默认值为SyncTaskExecutor),作业流工作正常。但是在Jboss中部署时,我们使用SimpleAsyncTaskExecutor,因为在Jboss中使用SyncTaskExecutor甚至不会触发作业。

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

共有1个答案

闾丘晨
2023-03-14

解决了问题。我提供了job-launcher=“joblauncher”属性,如下所示。因此单独的线程被启动,作业被并行触发。

  <batch:job ref="externalJob1" job-launcher="jobLauncher">

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

 类似资料:
  • 我想一个接一个地运行两个工作。是的,我确实在网上搜索过,但他们有解决方案,包括在第一份工作中增加第二份工作。但我有不同的要求。我会在第一批作业执行完成后得到一个通知,而第二批作业只有在收到这个通知后才会运行。是否有可能在Spring Boot中一个接一个地运行两个作业。请救命!

  • 我正在做一个项目,我们正在使用Spring Boot、Spring Batch和Camel。 关于如何在JobExecution数据可用时立即返回它,有什么想法吗?

  • 我的spring批处理应用程序运行在连接到MySQL数据库(单实例)的PCF平台上,只有一个实例启动时运行良好

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我正在使用spring批处理读取CSV文件并使用controller触发器将其写入DB。在启动应用程序时,在我从浏览器url中点击之前,我会在启动时看到来自阅读器的打印语句。虽然它不为我的处理器或写入器打印它,它们是在单独的类中,我已经自动连线。是因为读者是豆子吗?