2

Java プロジェクトで pgPool を使用して、Postgres データベースで負荷分散を行っています。

pgPool は読み取り専用クエリをスレーブ サーバーに送信し、書き込みクエリをマスター サーバーに送信します。それは大丈夫です。

しかし、私たちのアプリケーションには、クエリをマスターサーバーでのみ実行する必要がある非常に特殊なケースがあります。

pgPool は次のメカニズムを提供します。

/*NO LOAD BALANCE*/ SELECT * FROM user;

上記のクエリは、常にマスター サーバーで実行されます。

私はたくさん検索しましたが、手動クエリでコメントを設定することは可能ですが (Query クラスに setComment() があります)、メソッド名から作成されたクエリで Hibernate リポジトリを使用してそれを行う方法を見つけることができませんでした。

例:

public interface UserRepository extends Repository<User, Long> {
    List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

このクエリにコメントを入れる方法は?

4

1 に答える 1

0

まあ、これは元の質問には答えませんが、別のアプローチを使用して問題を解決しました。

pgPool ドキュメントのこのセクションを読んで解決策を見つけました: http://www.pgpool.net/docs/latest/pgpool-en.html#condition_for_load_balance

したがって、@Transactional で Java メソッドまたはクラスにアノテーションを付けると、クエリをマスター サーバーにルーティングするという望ましい結果が得られます。

このアノテーションを使用すると、pgPool は WRITE クエリ (含む) の後に作成されたすべてのクエリを Postgres マスター サーバーにルーティングします。

WRITE クエリがない場合は、@Transactional(isolation=Isolation.SERIALIZABLE) でアノテーションを付けることで結果を得ることができます (Spring を使用している場合)。ただし、この分離レベルが最も厳密であることに注意してください。

于 2016-09-09T20:54:08.673 に答える