最近做一個項目,布暑後出現"Could not open Hibernate Session for transaction",大意是資料庫連接逾時,需要設定重連.在這裡轉一個網上找的解決方案:
spring2.x+hibernate3+struts2 在首次登陸系統時拋出的異常,再登陸就正常。
異常:
javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed:
root cause
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed:
解決方案:
1.
給jdbc url 增加 autoReconnect=true 一定能解決你的問題,可以定期觀察一下 show processlist
改進方法如下:
<property name="url" value="jdbc:mysql://localhost/資料庫執行個體名稱?&useUnicode=true&characterEncoding=utf-8&autoReconnect=true"/>
2.
尋找支援重連的串連池。
注意:c3p0串連池支援重連;重連參數是:
idleConnectionTestPeriod 設定空閑串連測試周期
preferredTestQuery : 設定一查詢語句,用於重連測試
testConnectionOnCheckin設定為true
testConnectionOnCheckout設定為true
在sessionFactory裡配置:
<property name="hibernateProperties">
<props>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>