如何解决C3P0 Spring Hibernate:池已满如何调试?
我可以通过代码访问连接池,以便在释放连接和不释放连接时进行调试吗?
您甚至不必编写代码,它是内置的。如果您配置c3p0来调试连接泄漏,它将仅打印代码路径的堆栈跟踪,以将泄漏的连接检出到您的日志中。
<property name="unreturnedConnectionTimeout" value="30" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
您应该使用的值unreturnedConnectionTimeout
取决于您的应用程序。它应该比Connection预期的最长合法使用时间长,但不短于它,它会更快地收到有关该泄漏的日志消息,并且您的应用程序将更顺利地解决该问题。对于大多数网络式应用程序,上面显示的30秒是保守的,预计客户端不会等待30秒左右的响应,因此超时可以安全地指示连接泄漏。
解决方法
我在Tomcat上有一个Spring Hibernate应用程序。连接池为C3P0
我迅速遇到来自C3P0的线程池已满警告。然后,对Web应用程序的所有请求都将挂起。
我仍然假设在代码中的某个地方我错过了@Transaction注解。我想调试我的代码。
问题:是否可以通过代码访问连接池,以便在释放连接和不释放连接时进行调试?
更新:当前c3p0配置:
<!-- Hibernate -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver" />
<property name="jdbcUrl" value="jdbc:postgresql://localhost/ikoda01?useUnicode=true&characterEncoding=utf8" />
<property name="user" value="xxxuser" />
<property name="password" value="xxxxx" />
<property name="acquireIncrement" value="2" />
<property name="minPoolSize" value="3" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="600" />
</bean>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。