c3p0连接池没有缩小

时间:2014-01-24 22:35:56

标签: connection-pooling c3p0

我正在使用带弹簧的c3p0连接池(使用普通的jdbc,没有休眠)。这是我的配置

    <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个连接的最大值,但是当负载减少时,缩小后不会收缩。

我在这里错过了一些配置???

1 个答案:

答案 0 :(得分:0)

请参阅配置参数maxIdleTimemaxIdleTimeExcessConnections

如果您想在负载变亮时积极缩减池大小,请设置一个简短的maxIdleTimeExcessConnections。保持简单maxIdleTime相当长,所以一旦你的游泳池命中minPoolSize,你就不会毫无疑问地通过连接流失。

如果你不在乎这么多,那么只需设置maxIdleTime,最终池会随着空闲连接到期而缩小。但是对于maxIdleTime的合理值,这将会缓慢发生。

如果既未设置maxIdleTime也不maxIdleTimeExcessConnections(也不是maxConnectionAge),则这些值都默认为零,这意味着Connections永不过期,并且池只会在Connections中断并失败时缩小测试