C3P0 Spring Hibernate:池最大化。怎么调试?

时间:2017-01-20 22:54:44

标签: spring hibernate c3p0

我在Tomcat上有一个Spring Hibernate应用程序。 连接池是C3P0

我正在快速遇到来自C3P0的线程池最大警告。然后,所有对webapp的请求都会挂起。

我仍然假设代码中某处错过了@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&#38;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>

1 个答案:

答案 0 :(得分:2)

  

我是否可以通过代码访问连接池,以便在发布连接时以及何时不发布连接时进行调试?

Yes

您甚至不必编写内置的代码。如果您配置c3p0来调试连接泄漏,它只会打印代码路径的堆栈跟踪,检查泄漏的连接到您的日志。

<强>更新

<property name="unreturnedConnectionTimeout" value="30" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />

unreturnedConnectionTimeout应使用的值取决于您的应用程序。它应该比连接最长的预期合法使用时间长,但不会越短,你就会越快得到关于泄漏的日志消息,你的应用程序就会越顺畅地解决它。对于大多数web-ish应用程序,上面显示的30秒是保守的,客户端预计不会等待大约30秒的响应,因此超时安全地表示连接泄漏。