2016-12-14 11 views
0

真夜中に毎日実行したい単純なバッチバッチジョブを想像してみてください。しかし、我々は2つのノードのクラスタを持っています。このジョブを1回実行するだけです。開始する最初のノードがジョブを終了し、2番目のノードが処理をスキップします。春バッチ - ジョブの複製が正常に完了しました

これは、Spring Batchが両方のノードの同じデータベース内の状態を保持するので、簡単に行う必要があります。通常は動作しますが、残念ながら両方のノードが同時にジョブを実行してジョブを終了することがあります。それで、私はデータベースで重複したジョブの実行(同じパラメータ)を見ることができます。

私は、なぜそれが起きたのかを知ったと思います。単にジョブインスタンスがデータベースに存在するかどうかをチェックする前に単にジョブエグゼキュータを実行し、そうでなければ新しい行を作成します。しかし、両方のチェックが同時にデータベースにチェックされている場合は、両方とも同じものが作成されて実行されるため、何もないことがわかります。

両方のノードで同じ設定をする必要があります。

答えて

0

これを解決する最も簡単な方法は、リーダーとライターを同期させることです。 Reader/Writerのコードを変更できない場合は、同期のためにラッパーを実装してください。

+0

1つのJVMで同期するだけでなく、コンピュータ間でも同期したい – user3190916

関連する問題