3

データベースへの接続を監視するための最良/良い/最適な方法は何ですか。スイングアプリケーションを書いています。毎回データベースとの接続をチェックしてほしいです。私はこのようなことを試みました。

org.hibernate.Session session = null;
            try {
                System.out.println("Check seesion!");
                session = HibernateUtil.getSessionFactory().openSession();

            } catch (HibernateException ex) {
            } finally {
                session.close();
            }

しかし、それはうまくいきません。私の頭に浮かぶ2番目の質問は、このセッションの終了が他のクエリにどのように影響するかということです。

4

1 に答える 1

4

などの接続プールを使用します。このようなプールは、プール内の接続を監視するように構成できます。接続をHibernateに渡す前、受信した後、または定期的に。接続が切断された場合、プールは透過的に閉じ、破棄して新しいものを開きます-気付かないうちに。

データベース接続プールは、複数の接続が同時に開かれるマルチユーザーのデータベースを多用するアプリケーションに適していますが、それはやり過ぎではないと思います。プールは、最大1つの接続にバインドされていれば問題なく機能するはずです。

更新:データベースにアクセスしようとするたびに、HibernateはDataSource(接続プール)に問い合わせます。アクティブな接続が利用できない場合(たとえば、データベースがダウンしているため)、これは例外をスローします。データベースが利用できないとき(ユーザーが何もしていないときでも)を事前に知りたい場合は、残念ながら、データベースを時々チェックするバックグラウンドスレッドが必要です。

ただし、構成によっては、セッションをかろうじて開くだけでは不十分な場合があります。SELECT 1(raw JDBCで)のようなダミーの安価なクエリを実行する方がよいでしょう。

于 2012-07-26T16:50:14.197 に答える