dbcp接続プール接続reset

4332 ワード

最近の小さなプロジェクトでdbcp接続プールが使用されています.接続プールの構成は次のとおりです.
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <!-- Connection Info -->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- Connection Pooling Info -->
        <property name="maxIdle" value="${dbcp.maxIdle}"/>
        <property name="maxActive" value="${dbcp.maxActive}"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="timeBetweenEvictionRunsMillis" value="3600000"/>
        <property name="minEvictableIdleTimeMillis" value="3600000"/>
    </bean>

背景には、クエリーを発見すると、コンテンツがクエリーされない場合があります.ログを表示すると、Connection reset、私たちのデータベースはリモートであり、ネットワーク環境が安定していないため、接続プールから接続を取るたびに、
ネットワークが不安定なため、取得した接続は有効な接続ではないため、接続を使用するとパッケージ:Connection resetが作成され、夜にdbcp接続プールの構成を検索します.
 
dataSource:接続するdatasource(通常はserver.xmlでは定義されません)defaultAutoCommit:トランザクションがautoCommitであるかどうか、デフォルト値がtrue defaultReadOnly:データベースが読み取り可能かどうか、デフォルト値がfalse driverClassName:データベースを接続するために使用されるJDBC Driver Class、maxActive:オブジェクトプールから取り出すことができるオブジェクトの最大個数、0は制限がないことを示します.デフォルトは8 maxIdle:最大待機接続数、0を無制限(オブジェクトプール内のオブジェクト最大数)minIdle:オブジェクトプール内のオブジェクト最小数maxWait:最大待機秒数、単位ms、時間を超えるとエラーメッセージpassword:データベースにログインするためのパスワードurl:データベースに接続するURL username:データベースにログインするためのアカウントvalidationQuery:接続が成功したかどうかを確認し、SQL SELECT命令は少なくとも1行のremoveAbandonedを返す:自己中断するかどうか、デフォルトはfalse removeAbandonedTimeout:数秒後に自己中断する.removeAbandonedはtrue logAbandonedでなければならない:中断イベントを記録するかどうか、デフォルトはfalse minEveictableIdleTimeMillis:0より大きく、接続アイドル時間の判断を行うか、または0であり、空き接続を検証しない.デフォルト30分timeBetweenEvenictionRunsMillis:失効チェックスレッド実行間隔0以下の場合チェックスレッドは起動しません.デフォルト-1 testOnBorrow:オブジェクト取得時に検証を行うかどうか、オブジェクトが有効かどうかを確認します.デフォルトはfalse testOnReturn:オブジェクトを戻すときに検証を行うかどうか、オブジェクトが有効かどうかを確認します.デフォルトはfalse testWhileIdle:アイドル時に検証を行うかどうか、オブジェクトが有効かどうかを確認します.デフォルトはfalseです.
(上記構成から転載:http://grefr.iteye.com/blog/1874277、ここにはいくつかの使いやすい接続があります.http://agapple.iteye.com/blog/772507,http://www.blogjava.net/aoxj/archive/2008/02/19/180704.html)
 
上記の構成の説明に従って、dbcp構成を変更し、変更後の構成は次のとおりです.
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <!-- Connection Info -->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- Connection Pooling Info -->
        <property name="initialSize" value="10"/>
        <property name="maxIdle" value="${dbcp.maxIdle}"/>
        <property name="maxActive" value="${dbcp.maxActive}"/>
        <!--  sql -->
        <property name="validationQuery" value="select getdate()"/>
        <!--  ,  -->
        <property name="testOnBorrow" value="true"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="timeBetweenEvictionRunsMillis" value="3600000"/>
        <property name="minEvictableIdleTimeMillis" value="3600000"/>
        <property name="removeAbandonedTimeout" value="120" />
        <property name="removeAbandoned" value="true" />
    </bean>

接続プールから接続を受け取るたびに、その接続が有効な接続であるかどうかを検証し、無効な接続は新しく取得するので、使用する接続は有効な接続であり、接続resetは報告されませんが、この構成は一定の距離で効率に影響します.