2012-08-03 326 views
6

我正在修复iam正在处理的项目的连接超时问题。我们使用c3p0来管理连接池和休眠作为orm工具。我们也用春天。使用'debugUnreturnedConnectionStackTraces'调试连接丢失

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

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

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

感谢您的帮助

回答

3

个人而言,我一般都在下面2行添加到我的hibernate.cfg.xml

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

我相信在超时的默认值是0,我不知道该如何工作。

+0

谢谢斯科特。但是,如果我们将'debugUnreturnedConnectionStackTraces'设置为true,或者是否也应该对我的log4j.properties进行任何更改,这足够了吗?以及'debugUnreturnedConnectionStackTraces'记录栈跟踪的位置。它会登录到应用程序服务器的日志吗? – Npa 2012-08-03 17:04:55

+0

我不使用log4j,但我希望你需要把日志级别调试。是的,它应该在应用程序服务器日志中结束。 – 2012-08-03 17:33:50

10

对科里的答案扩展了一下:

如果unreturnedConnectionTimeout是积极的,debugUnreturnedConnectionStackTraces设置为true,那么产生的未归还的例外在日志记录器“com.mchange.v2 INFO级别将被记录的堆栈跟踪。 resourcepool.BasicResourcePool”。

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

请注意,如果未设置unreturnedConnectionTimeout,debugUnreturnedConnectionStackTraces将不做任何处理。

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

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

我希望这有助于!

p.s.只要设置得当,如何设置这些属性并不重要。 c3p0在INFO启动池时转储池配置;检查你的日志,以确保无论你想设置参数,你都有你期望的配置。或者,您可以使用JMX来检查参数。