我有一个使用Spring 3.0.3,Hibernate 3.6.0和Oracle DB的现有应用程序。
我已经设置并运行了c3p0,但我注意到一些我无法理解的奇怪事项。
这是我的Spring设置
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${xxgglom.driver}" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${username}" />
<property name="password" value="${password}" />
<property name="minPoolSize" value='5' />
<property name="maxPoolSize" value="40" />
<property name="maxIdleTime" value="240" />
<property name="maxIdleTimeExcessConnections" value="180" />
<property name="maxStatements" value="50" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="false" />
<property name="idleConnectionTestPeriod" value="300" />
我检查数据库v $ session,我看到它在池中创建了5个连接。我将开始使用该应用程序,它将在需要时增加池大小。所以我可以告诉C3P0正在检查日志。我遇到的一个问题是。这些非活动连接通过了maxIdleTime。
我检查他们的活着时间,他们通过了240秒。我再次检查数据库,它们都显示无效,但是当我查看日志时告诉我这个。
trace com.mchange.v2.resourcepool.BasicResourcePool@282fafdd [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f9f7637)
我不确定究竟发生了什么,但过了一段时间这些空闲连接开始堆积,而且他们似乎没有从连接池中被淘汰。关于该怎么做的任何建议?
答案 0 :(得分:2)
maxIdleTime
并不保证在任何特定时间都会剔除Connections。只要每个连接在配置下每4分钟至少使用一次,就不会被剔除。如果您想对Connections&#39;进行无条件限制。实时(我不知道你为什么会这样做),你可以使用maxConnectionAge
。