2017-07-19 10 views
0

私は一連のSpringバッチジョブを1つの順序で連鎖しました。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にデプロイするときには、SyncTaskExecutorを使用するとJbossでトリガージョブを使用しないので、SimpleAsyncTaskExecutorを使用します。

私はここにいなくなりましたか、ここで何か間違っていますか?提案してください。

答えて

0

問題を解決しました。 私は以下のようにjob-launcher = "jobLauncher"プロパティを提供しました。したがって、別々のスレッドが起動され、ジョブが並行してトリガーされました。

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

ここで、すべてのジョブからジョブランチャー参照を削除し、ジョブが設計どおりにトリガーしています。

関連する問題