2016-04-15 29 views
0

DB接続がSpringの設定によって作成されたアプリケーションを持っています(その後、休止状態に移行しました)。以下は、Springファイルのデフォルトのパラメータです。SpringのDBCP接続が終了しました

<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"> 
    <value>${database.driver}</value> 
    </property> 
    <property name="url"> 
    <value>${dbUrl}</value> 
    </property> 
    <property name="username"> 
    <value>${dbUser}</value> 
    </property> 
    <property name="password"> 
    <value>${dbPassword}</value> 
    </property> 
</bean> 

ただし、特定の環境では、特定の期間が経過するとネットワーク設定によってOracle DB接続が閉じられます。当初、接続の終了は、接続がアイドル状態であることが原因であると考えました。接続がアイドル状態にならないように定期的にサーバーにクエリを送信するためにvalidationQueryを追加しました。接続を設定する上でまだ閉じ取得された後も

<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"> 
    <value>${database.driver}</value> 
    </property> 
    <property name="url"> 
    <value>$dbUrl</value> 
    </property> 
    <property name="username"> 
    <value>$dbUser</value> 
    </property> 
    <property name="password"> 
    <value>$dbPassword</value> 
    </property> 
    <property name="validationQuery"> 
    <value>SELECT 1 FROM dual</value> 
    </property> 
    <property name="testWhileIdle"> 
    <value>true</value> 
    </property> 
    <property name="testOnReturn"> 
    <value>true</value> 
    </property> 
    <property name="timeBetweenEvictionRunsMillis"> 
    <value>1000</value> 
    </property> 
</bean> 
  1. また、アプリケーションが2-3時間の間アイドル状態になると、検証クエリはサーバーで実行されなくなり、ネットワーク設定によって接続が閉じられることが観察されます。

私の質問は、validationQueryの保証を追加していますが、接続はアイドル状態ではありませんか? DB接続を行わない最初のログイン時にアプリケーションが失敗します。 2-3回の試行の後に動作します。ここで何が起こっているのか分かりません。

答えて

1

validationQueryは、接続プールから取得された接続をテストするためにのみ使用されます。参照:https://commons.apache.org/proper/commons-dbcp/configuration.html

また、私はorg.apache.commons.dbcp.BasicDataSourceとOracle(11と12)でいくつかの奇妙な動作を見たことがあります。代わりに、org.apache.tomcat.dbcp.dbcp.BasicDataSourceを使って安定性が大幅に向上しました。 configオプションは、コモンズのdbcp実装とかなり近い(おそらく同じ?)ので、変換は簡単です。

+0

おかげで過去に問題がありました。 #2の私の質問では、実際にはminEvictableIdleTimeMillisが原因で、validationQueryが実行されませんでした。 – dRv

0

C3P0接続プールライブラリは、DBCPよりはるかに優れています。私は...今のところC3P0には問題を切り替えない以来、DBCPといつも私はvalidationQueryを理解する手助けのため

http://www.mchange.com/projects/c3p0/

関連する問題