3

クラスター モードで実行する必要があるジョブと、すべてのノードで実行する必要があるジョブがあります。クラスター化されていないジョブも永続的である必要があるため、クラスター化モードで実行するスケジューラーと非クラスター化モードで実行するスケジューラーを 2 つ作成しました。どちらもジョブ ストアと同じクォーツ テーブルのセットを使用します。このデザインに問題はありますか?Quartz 構成リファレンス (http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJDBCJobStoreClustering) から次のステートメントが表示されます。

クラスター化されていないインスタンスを、他のインスタンスが実行 (start()) されているのと同じデータベース テーブルのセットに対して決して開始 (scheduler.start()) しないでください。重大なデータ破損が発生する可能性があり、間違いなく不安定な動作が発生します.しかし、説明がなく、それが本当に意味があるかどうかはわかりません.別のクォーツテーブルのセットを作成せずに、別の方法はありますか.

4

1 に答える 1

7

2 つのスケジューラーを異なる名前で開始すると、同じテーブルを問題なく再利用できます。ジョブ、トリガー、およびその他すべての Quartz エンティティは、スケジューラ名を含む複合主キーによって識別されます。これは、クラスター化されたスケジューラーが異なるレコードのサブセットを使用し、クラスター化されていないレコードのレコードに触れないことを意味します。

別の解決策は、別のテーブル セットを使用することです。Quurtz では、スケジューラ ベースでテーブル プレフィックスを定義できます。

ドキュメントからのコメントは、同じスケジューラ名を持つ 2 つのクラスタ化されていないアプリケーションが同じデータベースを使用する状況に関するものです。その後、それらは互いにひどく干渉し、あらゆる種類の問題を引き起こします.

于 2012-10-03T08:25:07.763 に答える