簡體   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