Hibernate JDBCConnectionException - C3p0连接池

时间:2012-12-13 13:17:11

标签: hibernate c3p0

我们正在使用HibernateORM为我们的mysql数据库使用C3p0连接池。

以下是hibernate.cfg.xml中的设置

<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.maxConnectionAge">3600</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_size">300</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>

为了在28800秒后重新连接到数据库,我们设置了参数 -

c3p0.testConnectionOnCheckout=true

但我们正面临着休眠异常。

因此,如果我现在调用DB并等待8个小时(或者我设置my.cnf的变量wait_timeout的任何时间),如果我再次调用DB,我会得到该异常。 stacktrace -

org.hibernate.exception.JDBCConnectionException: could not execute query
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.loader.Loader.doList(Loader.java:2536)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
        at org.hibernate.loader.Loader.list(Loader.java:2271)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)

作为问题的快速解决方案,我们每天早上都会重新启动应用服务器。

任何帮助将不胜感激

- 感谢

1 个答案:

答案 0 :(得分:0)

如果您的配置是您认为的那样,那么这些异常就不会出现在闲置并且在池中超时之后检出的陈旧连接。连接在一小时后到期,无论如何,它们从不闲置超过大约五分钟,它们在结账时进行测试。

正在进行的两件事之一:

1)你没有你认为的配置,在配置和它要配置的c3p0数据源之间的中间出现了问题。

幸运的是,c3p0 DataSources在初始化时将其配置转储到INFO级别。检查您的日志,并验证您的池是否具有您打算使用的配置。

2)也许你的应用程序在池外持有Connections,而不是在短时间内检查它们并关闭它们,以便c3p0可以执行所有测试,到期等等,如果你的应用程序持有Connections很长时间以至于他们超时,c3p0无能为力。不过,c3p0可以帮助您测试是否正在进行此操作。尝试配置参数unreturnedConnectionTimeout和debugUnreturnedConnectionStackTraces。一起使用它们。参见

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

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

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

祝你好运!

相关问题