7

私は 2 つの異なる仕事を持っています (実際にはそれ以上ですが、簡単にするために 2 つと仮定します)。各ジョブは他のジョブと並行して実行できますが、同じジョブの各インスタンスは順番に実行する必要があります (そうしないと、インスタンスが互いのリソースを共食いします)。

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

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

4

3 に答える 3

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>
于 2012-12-21T18:36:23.753 に答える
1

@アバットフォア

ジョブはどのようにトリガーされますか? ひょっとしてクォーツトリガーを使っていませんか?はいの場合、すべてのジョブで org.quartz.StatefulJob インターフェースを実装/拡張するとうまくいきますか?

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

適切な「リーダー選出」実装を使用して、より複雑なシリアル化 (Spring バッチ ノード全体を含む) を実行できます。プロジェクトで Netflix Curator (Apache Zookeeper レシピ) を使用しました。ここにいくつかのポインタがあります: https ://github.com/regunathb/Trooper/wiki/Useful-Batch-Libraries

于 2012-12-17T13:32:46.620 に答える
0

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

各コマンド ラインの末尾に「&」を追加します。シェルは、それ自体の実行と並行してそれらを実行します。

于 2012-11-25T09:33:45.063 に答える