Hibernate用Mysql数据库时链接关闭异常的解决
来源:互联网 发布:宁波花溢网络科技集团 编辑:程序博客网 时间:2024/04/29 20:51
在一个项目中,客户要求除操作系统外全部使用免费软件,因此我使用了Mysql 4.0作为数据库服务器,其JDBC驱动为3.0.9版本,在给客户安装后调试一切正常。可是到了第二天,只要一登录就提示“No operations allowed after connection closed”异常,显示在浏览器上。在经过一番检查后我发现,在这种情况下只要重新启动Tomcat就恢复正常,然而到了第二天问题依旧。
在网上查找一下,原来Mysql在经过8小时不使用后会自动关闭已打开的连接,摘录原文如下:
5.4.
I have a servlet/application that works fine for a day, and then stops working overnight
MySQL closes connections after 8 hours of inactivity. You either need to use a connection pool that handles stale connections or use the "autoReconnect" parameter (see "Developing Applications with MySQL Connector/J").
Also, you should be catching SQLExceptions in your application and dealing with them, rather than propagating them all the way until your application exits, this is just good programming practice. MySQL Connector/J will set the SQLState (see java.sql.SQLException.getSQLState() in your APIDOCS) to "08S01" when it encounters network-connectivity issues during the processing of a query. Your application code should then attempt to re-connect to MySQL at this point.
在客户那边,晚上时间是不会有人使用这个系统的,就造成了系统中原先没有考虑到的这个情况。
为此我试验了三种方法:1、在数据库的url中加入autoReconnect=true;2、在每次调用getSession()方法时判断session.isClosed()是否为真,若为真则调用session.reconnect();3、在经过两天,事实证明前两种方法都不起作用的情况下,我在这个页面找到了第三种方法,即不使用Hibernate内置的连接池(Hibernate强烈推荐不使用但我以前一直在用),改用C3P0连接池,这个连接池会自动处理数据库连接被关闭的情况。要使用C3P0很简单,先从Hibernate里把c3p0-0.8.3.jar复制到项目的lib目录中,再在hibernate.properties里去掉hibernate.c3p0开头的那些属性的注释(使用缺省值或自己需要的数值),这样Hibernate就会自动使用C3P0代替内置的连接池了。到目前为止前面的问题没有再出现过。
以前对Hibernate警告不要使用内置连接池作产品用途没有太放在心上,这次是一个教训,所以不论从稳定还是性能的考虑,都应该选择相对更加成熟的连接池。
update:除了连接池的原因,原先写的HibernateDAO类也有问题,在有些情况下一个session会被多个请求反复使用,现在已改正。另外,c3p0这个名字不是星球大战里那个机器人么?
- Hibernate用Mysql数据库时链接关闭异常的解决
- Hibernate异常--数据库所在服务器关闭引起的异常
- OpenSessionInViewFilter解决数据库操作表(一对多)延迟加载时session关闭的异常
- 如何在关闭数据库链接时,自动关闭由该链接创建的所有Statement
- MYSQL数据库的链接
- hibernate 链接Mysql数据库小案例
- 链接数据库时80004005错误的解决
- Hibernate关闭Connection链接
- 在使用 Navicat for MySQL 链接数据库的时候出现链接异常;
- hibernate与数据库的链接
- hibernate常见的异常解决
- 用hibernate链接db2数据库
- 用于关闭数据库链接的存储过程
- 读写数据库关闭链接的问题
- MFC之解决关闭异常的处理
- ubntu笔记6_用codeblock访问MySQL数据库(解决IDE链接MySQL数据库问题
- 2.3.12 数据库异常关闭的情况
- mysql 链接 与关闭
- 【转贴】笑死你的整人电话终极篇!
- DELPHI多国语言版本编写指南
- JBPM 工作流引擎 JBPM指南 例子:数据库 (3.2)
- [废话]准备迎接RiA时代。。。
- 愤怒了!!除夕夜前,我要回家!!!
- Hibernate用Mysql数据库时链接关闭异常的解决
- XQuery performance问题
- middlegenide的生成文件中文注释小问题修改
- 回家了
- 偶发现csdn blog的管理端的速度实在使太忙了,经常等待,
- openoffice的目录标签建立方法
- HTML常用标记
- HTML标记大全
- 大教堂和市集