2016-09-09 11 views
1

JavaプロジェクトでpgPoolを使用して、Postgresデータベースでロードバランシングを実行しています。Java Hibernateクエリのロードバランスコメントがありません

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

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

pgpoolのは、次のようなメカニズムを提供します。

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

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

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

例:

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

このクエリにコメントを配置する方法は?

+0

あなたはおそらくそうではありません。 – Kayaman

+0

ええと...私は多くを読んできましたが、私は同じ結論に達しました。また、HQLクエリ(Hibernateクエリ言語)にコメントを入れることもできません。 – computeiro

+0

これは低レベルの非標準的なメカニズムであることを考慮すると、上位レベルのフレームワークがそれをサポートしていないことは驚くことではありません。 – Kayaman

答えて

0

これは元の質問には答えませんが、私は別の方法で問題を解決しました。

私はpgpoolのドキュメントのこのセクションを読むことによって、解決策を見つけた:http://www.pgpool.net/docs/latest/pgpool-en.html#condition_for_load_balance

ので、@TransactionalでJavaメソッドやクラスに注釈を付けることは、マスターサーバーにクエリーをルーティングするの所望の結果を達成。

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

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

関連する問題