SSH項目過一段時間之后再訪問會報一次Could not open Hibernate session for transaction 異常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyi,再重新方法即可訪問成功(通常出現在過了一晚之后再去訪問系統)


  前端時間到客戶那去進行項目的上線測試,將項目部署好之后,運行都是正常的,可是每到了第二天早上訪問的時候,就會報一個Could not open Hibernate session for transaction 異常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception,當時很摸不着頭腦,后來就開始從數據庫連接的源頭開始找,本次項目中用的是c3p0連接池,並將其交給了spring管理,所以在配置文件中配置了一些數據庫連接的必要屬性,數據庫驅動、數據庫url、用戶名和密碼等,但是總感覺問題出在這,c3p0通過這些配置竟然第一次訪問不到數據庫,在通過一番查閱資料之后,了解到mysql經過28800秒也就是8小時之后會將所有的空閑連接關閉,而c3p0經過6000000秒才會斷開連接,所以很有可能出現mysql的連接已經關掉了,而c3p0還沒有保持着連接,所以每次過完8小時訪問之后,通過c3p0去訪問的時候,c3p0還處於正常連接狀態則會去直接請求打開事務然后訪問數據庫,而此時的數據庫已經關閉,自然就出現了Hibernate不能打開session的異常。

  解決辦法是在配置文件中加入: 

<!-- 使c3po每隔28000檢查已有的連接是否可用 -->

<property name="idleConnectionTestPeriod" value="28000"></property>
<!-- 最大空閑時間,超過空閑時間的連接將被丟棄。為0或負數則永不丟棄。默認為0 -->
<property name="maxIdleTime" value="28000"></property>
<property name="preferredTestQuery" value="測試連接數據庫的sql語句"></property>  ----比如select *  from systemInfo;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM