0

2 つの異なるインスタンスで実行されている Spring Web アプリケーションがあります。2 つのインスタンスは互いを認識せず、別々のサーバーで実行されます。

そのアプリケーションにはスケジュールされた Quartz ジョブがありますが、私の問題は、メール送信ジョブであるため、ジョブがインスタンスで同時に実行されるべきではないことです。重複したメールが送信される可能性があります。

RAMJobStore を使用していますが、JDBCJobStore が必要とするテーブルが多数あるため、JDBCJobStore はオプションではありません (内部制限により、多くのテーブルを作成する余裕はありません)。

私が考えた解決策: -ジョブが開始されるたびにチェックする必要がある単一の制御テーブルを作成する (同時実行の問題を回避するための反復可能な読み取り分離レベルを使用) 問題は、サーバーが強制終了された場合、テーブルが無効な状態。

-プロパティを使用して、単一のサーバーをジョブ実行サーバーとして定義します。問題は、そのサーバーがダウンした場合、ジョブの実行が停止することです

誰かがこの問題を経験したことがありますか?共有する考えはありますか?

4

1 に答える 1

1

2 番目の解決策から始めます (1 つを除くすべてのノードで qartz を非アクティブ化します)。やり方はとても簡単で安全です。サーバーがダウンする頻度を数えます。受け入れられない場合は、最初の解決策を試してください。最初の解決策の問題点は、バグなしで実装するには、マルチスレッド プログラミングの優れたスキルが必要なことです。マルチスレッドが日常業務でない場合は、それほど単純ではありません。また、実装の一部のバグのコストは、実際の利益よりも大きい場合があります。

于 2013-07-10T14:29:18.680 に答える