最近用 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 阅读(12498)
评论(5) 编辑 收藏 所属分类:
hibernate