2014-01-24 109 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)设置,这些值都默认为零,这意味着连接永不过期,和游泳池只会萎缩,因为连接断裂并测试失败。