我正在使用带有Spring的c3p0连接池(使用普通的jdbc,没有hibernate)。这是我的游泳池配置
<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>
我正在使用JMX来监控我的连接池。我看到我的游泳池在负载下增长到25但从未收缩。我在这里错过了一些cofig吗?
答案 0 :(得分:2)
默认设置是不缩小池。您需要设置maxIdleTimeExcessConnections。从手册(重点补充):
maxIdleTimeExcessConnections
默认值:0
超过minPoolSize的连接的秒数 在被淘汰之前允许在池中闲置。 打算用于 希望积极减少开放数量的应用程序 连接,将池缩小回minPoolSize if,如下 一个尖峰,负载水平减少,连接获得是否定的 需要更久。如果设置了maxIdleTime,则为maxIdleTimeExcessConnections 如果参数有任何影响,应该更小。 零意味着 没有强制执行,多余的连接不会闲置。
让您的游泳池在高负荷后缩小: