私のアプリケーションは4ノードのクラスターで実行されています。起動時に(ServletContextListener)、SQLスクリプトを実行する必要があります。各ノードが同じコードを実行しようとするため、SQLが4回ではなく、1回だけ実行されるようにするにはどうすればよいですか?
質問する
1666 次
1 に答える
1
それを 1 回だけ実行したい場合 (データベース構造を更新するスクリプトなど)、データベースである種のバージョン フィールドを使用する必要があります (最も単純なケースでは、1 列/1 行のテーブルのみ)。自分でやりたくない場合は、http://flywaydb.org/が解決策になるかもしれません。代わりに、インスタンスが同時に同じスクリプトを実行していないことを確認したい場合は、基本的に同じ考え方を使用しますが、常に増加するバージョン フィールドを使用する代わりに、スクリプトの終了後にリセットする同じ種類のブール ロックを使用します。自分で ist を実装したい場合は、同時アクセスを適切に処理してください。たとえば、select entry from lock /if entry = 0 update lock set entry = 1
which が非アトミックである代わりに、次のようなことを行いますupdate lock set entry = 1 where entry = 0/check if number affected rows = 1
于 2012-12-12T06:42:35.367 に答える