使用'debugUnreturnedConnectionStackTraces'调试连接丢失

时间:2012-08-03 15:49:13

标签: java spring hibernate connection-pooling c3p0

我正在努力解决我正在处理的项目的连接超时问题。我们使用c3p0来管理连接池和hibernate作为orm工具。我们也用春天。

要查找是否存在任何未返回的连接,我已在我的c3p0配置中将debugUnreturnedConnectionStackTraces设置为true(不在c3p0属性中)。

还有什么我需要做的。我是否还必须向lod4j.properties添加任何内容,还是仅将debugUnreturnedConnectionStackTraces设置为true?

另外,我应该在c3p0属性中将debugUnreturnedConnectionStackTraces设置为true吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:11)

对Corey的答案进行了扩展:

如果unreturnedConnectionTimeout为正且debugUnreturnedConnectionStackTraces设置为true,则生成未返回异常的堆栈跟踪将由记录器“com.mchange.v2.resourcepool.BasicResourcePool”记录在INFO级别。

通常人们会从所有记录器中记录INFO级别以上的任何内容,因此这些堆栈跟踪只会出现在您的日志中。但是,如果您没有看到它们,请检查您的日志记录配置,以确保不会过滤来自该记录器的INFO消息。

请注意,如果未设置unreturnedConnectionTimeout,则debugUnreturnedConnectionStackTraces将执行NOTHING。

http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout

http://www.mchange.com/projects/c3p0/#debugUnreturnedConnectionStackTraces

我希望这有帮助!

P.S。只要设置正确,无论如何设置这些属性都无关紧要。 c3p0在池启动时转储INFO池配置;检查您的日志以确保无论您是否尝试设置参数,都可以获得预期的配置。或者,您可以使用JMX检查参数。

答案 1 :(得分:3)

我个人通常会将以下两行添加到我的hibernate.cfg.xml

<property name="hibernate.c3p0.unreturnedConnectionTimeout">60</property>
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>

我相信超时的默认值是0,我不确定它应该如何工作。