java - 在最大等待时间后,c3p0 非 Activity 连接不会从连接池中剔除

标签 java spring hibernate connection-pooling c3p0

我有一个使用 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 秒。我再次检查数据库,它们都显示为非 Activity 状态,但是当我查看日志时告诉我这一点。

trace com.mchange.v2.resourcepool.BasicResourcePool@282fafdd [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f9f7637)

我不确定到底发生了什么,但过了一会儿这些空闲连接开始堆积,而且它们似乎没有从连接池中剔除。有什么建议吗?

最佳答案

maxIdleTime 不保证连接会在任何特定时间被剔除。只要在您的配置下每个连接至少每 4 分钟使用一次,它们就不会被剔除。如果您想无条件限制连接的生存时间(我不知道为什么),您可以使用 maxConnectionAge

关于java - 在最大等待时间后,c3p0 非 Activity 连接不会从连接池中剔除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354449/

相关文章:

java - 如何使用 JPA、Hibernate 与同一实体建立关系

java - Spring 中的 Maven 配置文件和应用程序 yml 文件

java - Spring 。 "schemaLocation ... must have even number of URI' 秒”

Hibernate 使用带有条件的别名

java - 调整 libgdx 中表格单元格中图像的大小

java - Autowiring 优先级

hibernate - grails/hibernate:在作业中获取org.hibernate.StaleStateException

java - Jface tableviewer 中的 ColumnLabelProvider 和 ITableLabelProvider 有什么区别?

java - SimpMessagingTemplate 不在 spring boot 中发送消息

java - Jar 在网页中作为小程序嵌入时运行,但在使用 jnlp 方法时不运行