2014-01-24 49 views
0

我正在用spring的c3p0連接池(用普通的jdbc,沒有休眠)。下面是我的配置
c3p0連接池不縮水

 <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
     <property name="driverClass" value="${jdbc.driver}"/> 
     <property name="jdbcUrl" value="${jdbc.url}"/> 
     <property name="user" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
     <property name="acquireIncrement" value="3"/> 
     <property name="minPoolSize" value="3"/> 
     <property name="maxPoolSize" value="25"/> 
     <property name="maxStatementsPerConnection" value="0"/> 
     <property name="numHelperThreads" value="6"/>   
     <property name="testConnectionOnCheckout" value="false" /> 
     <property name="testConnectionOnCheckin" value="false" /> 
     <property name="idleConnectionTestPeriod" value="10"/> 
     <property name="preferredTestQuery" value="select curdate()"/> 
    <property name="maxIdleTime" value="5" />  
    <property name="unreturnedConnectionTimeout" value="5" />  
    <property name="debugUnreturnedConnectionStackTraces" value="true" /> 
    </bean> 

我確實看到,連接池命中的25個連接最大值,但有退縮從來沒有退縮當負載降低。

我在這裏丟失了一些配置?

回答

0

請參閱配置參數maxIdleTimemaxIdleTimeExcessConnections

如果您想在負載減輕時積極削減池大小,請設置一個簡短的maxIdleTimeExcessConnections。只留下相當長的maxIdleTime相當長的時間,所以一旦你的游泳池擊中了minPoolSize,你就不會不必要地通過連接轉移。

如果您不太在意,那麼只需設置maxIdleTime,並且隨着空閒連接到期,池最終會縮小。但是對於maxIdleTime的合理值,這將發生緩慢。

如果沒有maxIdleTime也不maxIdleTimeExcessConnections(也不maxConnectionAge)設置,這些值都默認爲零,這意味着連接永不過期,和游泳池只會萎縮,因爲連接斷裂並測試失敗。