JDBCプールの接続検証

ポール・ストーナー:

私は先日私のアプリケーションで停電を経験し、私は将来的にこの問題を回避する方法を理解する必要があります。

我々は、Tomcat 7上のOracleデータベースを含む複数の異なるデータソースに接続されたアプリケーションを実行しているJavaベースのWebアプリケーションを持っています。

ここでは詳細は、Oracleデータベース・サーバーがダウンし、再起動する必要がありましたです。私の簡単な理解では、これはデータベースに対するアプリケーションの接続を切断しているだろう、実際にユーザーがアプリケーションにエラーを報告した私に語りました。

Oracleデータ・ソースは、GlobalNaming資源としてのTomcatのsever.xmlでセットアップです。

<Resource name="datasource"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        ....
        initialSize="4"
        minIdle="2"
        maxIdle="8"
        maxActive="8"
        maxAge="28800000"
        maxWait="30000"
        testOnBorrow="false"
        testOnReturn="false"
        testWhileIdle="false"
        validationQuery="SELECT 1 FROM dual"
        validationQueryTimeout="10"
        validationInterval="600000"
        timeBetweenEvictionRunsMillis="60000"
        minEvictableIdleTimeMillis="900000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"
        jmxEnabled="true" />

だからここに私は、接続の検証について理解するものです。

  • アイドル(testWhileIdle = false)をしながら、(testOnReturn =偽)を返したときに、(testOnBorrow = false)を借りたときの接続は、検証されていません
  • timeBetweenEvictionRunsMillis> 0、removeAbandonedが真である、とremoveAbandonedTimeoutを> 0のでPoolSweeperが有効になっています

すべてのテストが無効になっているので、どのような私を混乱することは検証クエリーとvalidationInterval> 0を含めることで、プールの掃除は、接続を確認するために検証クエリーを使用していますか?または検証クエリは関係ありませんか?

データベースサーバがダウンしたときに、私は何の検証テストが有効になっていませんがあるため、接続プールを再確立接続にしようとしていないと考えています。データベースサーバがバックアップ有効な接続が確立されていたであろう来て、(Tomcatを意味する)Webアプリケーションが再起動を必要としなかったであろうとき、私の意見では、testOnBorrowは、有効になっていました。

私は、接続の検証がどのように動作するかの正しい理解を持っていますか?

ポールWasilewski:

私たちはあなたのプール内の無効な接続を避けるために、あなたの設定の関連部分を見てみましょう。

maxAge="28800000"

接続には関係なく、もし有効か無効8時間開いたままになります。8時間後の接続が閉じられ、要求された場合は、新しい接続が確立され、空き接続がプール内に使用できません。[1]

testOnBorrow="false"
testOnReturn="false"
testWhileIdle="false"

プール内の接続は、それが借りられている間や、返され、アイドル時に、それが有効であるかどうかをテストされることはありません。[1]

validationInterval="600000"

このプロパティは、すべての接続テストがfalseに設定されているので、効果がありません。接続をテストするために必要とされるこの間隔を定義。あなたの例では、接続がテストプロパティがtrueに設定されます場合には10分ごとにテストされます。[1]

無効な接続は、現在の構成で8時間に開放まで滞在することができます。セットに少なくとも一つのテストプロパティ(お持ちの開かれた接続の検証テストを有効にするにはtestOnBorrow, testOnReturn, testWhileIdletrueにします)。

ノートは、の場合にしてくださいvalidationInterval="600000"接続テスト/検証は10分ごとに行われます。だから、無効な接続がテストプロパティが設定されているにかかわらず、プール内の使用可能な10分までである可能性があります。

個々のプロパティの詳細についてはをご覧ください[1]:Apache Tomcatの7:TomcatのJDBC接続プール

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=215825&siteId=1