繁体   English   中英

Hibernate JDBCConnectionException-C3p0连接池

[英]Hibernate JDBCConnectionException - C3p0 connection pooling

我们正在使用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

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

因此,如果现在立即调用数据库并等待8个小时(或设置my.cnf的变量wait_timeout的时间长短),那么如果再次调用该数据库,则会出现该异常。 堆栈跟踪 -

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)您没有想要的配置,配置和它打算配置的c3p0数据源之间的中间出问题了。

幸运的是,c3p0数据源在初始化时以INFO级别转储其配置。 检查您的日志,并验证您的池是否具有您想要的配置。

2)也许您的应用程序将Connections保留在池外,而不是将它们检查一小段时间并关闭()将它们关闭,以便c3p0 ca可以进行所有测试,到期等操作,如果您的应用程序长时间持有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

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM