3

Hibernateフレームワーク(スプリングなし)を備えたJavaアプリケーションがMySQL DBに接続し、c3p0を介して接続プールを管理しています

スレーブ データベースから読み取り、マスター データベースに書き込むようにアプリケーションを構成しようとしています。マスター/スレーブのロード バランスを拡張するには、このリンクをたどっています。

アプリケーションがすでにプール内の接続を使用してセッションを取得しており、このように読み取り専用メソッドを実行する必要があるとします。

public someReadOnlyMethod()
{
    Session session = (get session from current Thread)

            //set read-only so that it read from slave db
            session.connection().setReadOnly(true);

            (...connect to db to do something...)

            //set it back in case of this method is followed by write method so that it go to master db
            session.connection().setReadOnly(false);


}

プーリングは、読み取り専用および書き込み操作のために db に 2 回接続するための新しい接続を作成しますか (そうであれば、これはパフォーマンスに大きな影響を与えます)、または操作を既存の読み取り専用および書き込み可能な接続プールにスワップするのに十分スマートですか?

アドバイスありがとうございます。

4

2 に答える 2

0

したがって、これはプールとは関係ありません。それはすべてmysqlドライバーにあります。c3p0 は setReadOnly (true または false) への呼び出しを基になる接続に渡し、接続はそれに応じてマスターまたはスレーブにルーティングされます。

Connections のデフォルトの方法が気に入らない場合 (おそらくデフォルトでは読み取り専用ではない)、c3p0 ConnectionCustomizer の onAcquire メソッドで読み取り専用プロパティを設定すると、値 use set (true または false) が次のようになります。 c3p0 が接続をリセットするデフォルト。

幸運を!

于 2013-03-30T09:24:46.050 に答える