12

OracleConnectionCacheImplを介したOracle接続プーリングで問題が発生しています。シンドライバを介してデータベースサーバー(Oracle 10g)の接続プールに接続すると、不特定の時間が経過すると、db接続が切断され(おそらくアイドル接続が原因ですか?)、エラーメッセージが表示されるまですべて正常に動作します。

閉じた接続。

ページを更新して接続を再試行するとデータベースが再接続されるため、ネットワークやデータベースに問題はないようです。Oracle接続プールが接続を検証し、プール内の接続が何らかの理由で切断された場合に再接続する方法はありますか?

Apache Tomcat 6.0.18、Java EE6update11を使用しています。

(Oracleシンドライバにはping関数があるようです。それは役に立ちますか?どこで見つけることができますか?)

4

3 に答える 3

0

context.xml にいくつかの構成パラメーターを追加して、Tomcat 接続プールが切断された接続を処理するようにすることができます。これは context.xml の一例です。設定に従って、user/password/url/ports などを使用してください。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="">
    <!-- Specify a JDBC data source -->
    <Resource name="jdbc/db" auth="Container"
              type="javax.sql.DataSource"
              username="user"
              password="password"
              driverClassName="driver.class.fullpath"
              url="jdbc:oracle://localhost:3306/
              maxActive="50"
              maxIdle="10"
              testOnBorrow="true"
              testWhileIdle="true"
              validationQuery="/* ping */"
              removeAbandoned="true"
              logAbandoned="true"/>
</Context>
于 2014-04-29T21:14:49.007 に答える
0

ここでは Apache DBCP (DB 接続プール) が役に立ちます。「validationQuery」パラメーターを使用して構成できます。これは、接続が提供される前に、プールから削除された接続で実行する SQL クエリです。クエリが失敗した場合、接続は破棄され、新しい接続が作成されて提​​供されます。

詳細については、 http://commons.apache.org/proper/commons-dbcp/configuration.htmlを参照してください。

プールから接続を取得するたびに validationQuery が呼び出されるため、できるだけ高速である必要があることに注意してください。例えば:

SELECT id FROM users LIMIT 1;
于 2013-04-05T10:42:23.137 に答える
-1

C3P0 などの別の接続プール ライブラリを使用し、自動再接続の機能を使用します。

于 2012-11-29T17:23:43.113 に答える