连接池C3P0记录

时间:2012-08-05 19:56:41

标签: java spring hibernate connection c3p0

我有一个使用c3p0作为连接池的Web应用程序。我们使用hibernate作为orm工具。 最近,我们一直在获取连接超时异常。为了调试这些异常,我启用了C3p0的日志记录并在日志中获得了一些信息。任何人都可以帮助我完全理解它。

DEBUG 2012-08-05 14:43:52,590 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] com.mchange.v2.c3p0.stmt.GooGooStatementCache: checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 2; checked out: 0; num connections: 1; num keys: 2

从上面可以看出,连接池的总大小是2.检出的连接数是0.这是对的吗?以上是什么是num_connections和num键?

谢谢..

2 个答案:

答案 0 :(得分:1)

您在引用的日志中看到的是Statement缓存的快照,而不是Connection池的快照。在记录消息时,有两个缓存的PreparedStatements属于单个Connection。这两份声明都没有签出/正在使用中。

我希望这有帮助!

答案 1 :(得分:0)

异常可能是由于错误定义了C3P0设置。确保链接到正确的jar文件您的应用程序必须链接到“hibernate-c3p0 * .jar”而不是“c3p0 * .jar”。 hibernate.cfg文件必须定义hibernate.connection.provider_class属性才能使c3p0设置生效。以下是示例设置

<property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property>

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>

日志条目指定池中有4个连接,并且所有4个连接都可供应用程序使用。对数据库运行查询以列出所有活动连接将显示池连接。例如,在Mysql中,您可以运行“show processlist;”来查看这些连接。