最近用 Hibernate 3 連接 Mysql 4 數據庫。
調試時都還好,真正發布的時候毛病來了。
每天早晨都要都會報錯,不能正常操作數據庫。
Mysql 重啟,無效,Tomcat 重啟,有效。
Mysql(MySQL 4.1) 文檔 7.5.2 節
Tuning Server Parameters 里面
在 Mysql控制臺下輸入 SHOW VARIABLES;
最后一個參數
wait_timeout?? ?28800
如果單位是秒,也就是 8 個小時。
程序最后一次建立連接完畢之后 8 個小時,
Mysql 單方面關閉了這個連接。
但 Hibernate 還在記憶著這個連接基本信息。
程序再次連接的時候,已經不存在了。
不過,Hibernate 可以設置它自己的 timeout 。
到了 Hibernate 3 默認第三方的連接池管理,
由 Apache 的 DBCP 項目更換成了
c3p0 項目。
它的屬性在 Hibernate 配置屬性有對應的寫法,如:
c3p0.maxIdleTime = hibernate.c3p0.timeout
c3p0.maxPoolSize = hibernate.c3p0.max_size
所以,要修改一下 hibernate.cfg.xml 文檔
將 Hibernate 默認連接池參數
<property name="connection.pool_size">5</property>
刪除或注釋掉,Hibernate 默認連接池比較初級。
然后,加入以下屬性
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_size">5</property>
就可以使用 c3p0 來管理連接池了。
其實這些屬性的參數名都可以在 Hibernate 文檔 3.3 節
JDBC connections 里面找到。
按照相應的格式更改名字和值就可以了。
posted on 2006-02-14 19:43
rox 閱讀(12506)
評論(5) 編輯 收藏 所屬分類:
hibernate