2012-11-20 8 views
7

私は2つの異なるジョブを持っています。各ジョブは他のジョブと並行して実行できますが、同じジョブの各インスタンスを順番に実行する必要があります(そうしないと、インスタンスによって互いのリソースが混乱する)。春バッチ:別のジョブの異なるジョブランチャー

基本的には、これらのジョブのそれぞれにジョブインスタンスのキューを持たせたいと思います。私は、2つの異なるスレッドプールジョブランチャー(それぞれが1つのスレッド)を使用し、ジョブランチャーを各ジョブに関連付けることでこれを行うことができると考えました。

Spring Batch Admin Web UIからジョブを起動するときに尊重される方法はありますか?

答えて

2

特定のジョブに特定のジョブランチャーを指定する方法がありますが、これを行う方法としてはJobStepを使用する方法しかありません。

"specificJob"というジョブがある場合、別のジョブ "queueSpecificJob"が作成されるので、QuartzまたはSpring Batch Web管理者を介して起動すると、 "specificJob"実行がキューに入れられます。

<bean id="specificJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
    <property name="jobRepository" ref="jobRepository"/> 
    <property name="taskExecutor"> 
     <task:executor id="singleThreadPoolExecutor" pool-size="1"/> 
    </property> 
</bean> 

<job id="queueSpecificJob"> 
    <step id="specificJobStep"> 
     <job ref="specificJob" job-launcher="specificJobLauncher" job-parameters-extractor="parametersExtractor" /> 
    </step> 
</job> 
0

シェルスクリプトを使用すると、さまざまなジョブを並行して起動できます。

各コマンドラインの最後に「&」を追加します。シェルは、自身の実行と並行してシェルを実行します。

+1

私は、シェルスクリプトは、春のバッチ –

+0

シェルスクリプトを行うには何も持っていないと思うだけで、並列ジョブとして春のバッチジョブを起動するためのものです。 – Sajith

+0

これはジョブのキューイングの問題に対処していません。私は具体的には、同じジョブのジョブインスタンスを並行して実行させたくないので、それらを順番に実行したい。 – ahbutfore

1

@ ahbutfore

ジョブはどのようにトリガーされますか?万が一、クォーツトリガーを使用していますか? 「はい」の場合、すべてのジョブでorg.quartz.StatefulJobインターフェースを実装/拡張すると効果がありますか?

ここで春の豆の構成を参照してください:https://github.com/regunathb/Trooper/blob/master/examples/example-batch/src/main/resources/external/shellTaskletsJob/spring-batch-config.xml。 org.trpr.platform.batch.impl.spring.job.BatchJobのソースコードを確認してください

適切な "Leader Election"実装を使用して、より複雑なシリアライゼーション(Springバッチノードを含む)を行うことができます。私はプロジェクトでNetflix Curator(Apache Zookeeperレシピ)を使用しました。いくつかのポインタはここにあります:https://github.com/regunathb/Trooper/wiki/Useful-Batch-Libraries

関連する問題