2017-07-19 80 views
0

我已經按順序鏈接了一組Spring作業。Spring批處理作業鏈執行不等待以前的作業在Jboss中完成

<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中的作業。

我在這裏錯過了什麼,或者我在這裏做錯了什麼?請建議。

回答

0

解決了這個問題。 我已經提供瞭如下的job-launcher =「jobLauncher」屬性。因此獨立的線程被啓動並且作業被並行觸發。

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

現在我已經從所有作業中刪除了joblauncher引用,並且按照設計觸發作業。

相關問題