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