web-dev-qa-db-ja.com

クラスター環境のQuartzスケジューラー

私は使っている

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
Trigger asapTrigger = getAsapTrigger();
JobDetail asapJob = getAsapJobDetails();
scheduler.scheduleJob(asapJob, asapTrigger);

これは機能していますが、クラスター環境に行くと、同じジョブで2つのスレッドが実行されています。

プロパティファイルではなく注釈を使用しています。 1つのスレッドだけを実行したい。誰かがこれを助けることができますか?設定方法

私のコードはほとんど次のようになります: http://k2Java.blogspot.com/2011/04/quartz.html

28
venkat

クラスター環境で実行するには、Quartzを構成する必要があります。現在、クラスタリングはJDBCジョブストアでのみ機能し、クラスターの各ノードが同じデータベースを共有することで機能します。

  • 同じデータベースのセットを使用するQuartzのインスタンスが複数ある場合は、org.quartz.jobStore.isClusteredプロパティをtrueに設定しますテーブル。このプロパティは、クラスタリング機能を有効にするために使用されます。
  • org.quartz.jobStore.clusterCheckinIntervalプロパティ(ミリ秒)を設定します。これは、このインスタンスがクラスターの他のインスタンスとチェックインする頻度です。
  • org.quartz.scheduler.instanceId[〜#〜] auto [〜#〜]に設定して、各ノードがクラスターには一意のinstanceIdがあります。

クラスター内の各インスタンスは、quartz.propertiesファイルの同じコピーを使用する必要があることに注意してください。さらに、別々のマシンでクラスタリングを使用する場合は、それらのクロックが同期されていることを確認してください。

詳細については、クラスタ化されたスケジューラのサンプルプロパティファイルが含まれている 公式ドキュメント を確認してください。