38

私は使っている

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

4

1 に答える 1

48

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

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

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

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

于 2012-09-27T20:14:57.943 に答える