我正在努力解决我正在处理的项目的连接超时问题。我们使用c3p0来管理连接池和hibernate作为orm工具。我们也用春天。
要查找是否存在任何未返回的连接,我已在我的c3p0配置中将debugUnreturnedConnectionStackTraces设置为true(不在c3p0属性中)。
还有什么我需要做的。我是否还必须向lod4j.properties添加任何内容,还是仅将debugUnreturnedConnectionStackTraces设置为true?
另外,我应该在c3p0属性中将debugUnreturnedConnectionStackTraces设置为true吗?
感谢您的帮助
答案 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,我不确定它应该如何工作。