6

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

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

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

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

谢谢您的帮助

4

2 回答 2

11

扩展一下Corey的答案:

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

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

请注意,如果未设置 unreturnedConnectionTimeout,则 debugUnreturnedConnectionStackTraces 将不执行任何操作。

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

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

我希望这有帮助!

ps不管你如何设置这些属性,只要它们设置正确。c3p0 在池启动时将池配置转储到 INFO;检查您的日志以确保,无论您尝试设置参数,您都拥有您期望的配置。或者,您可以使用 JMX 来检查参数。

于 2012-08-04T00:22:29.353 回答
3

就我个人而言,我通常将以下两行添加到我的 hibernate.cfg.xml

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

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

于 2012-08-03T16:56:39.597 回答