当前位置:首页 > 系统运维 > 正文内容

Hibernate用MySQL数据库时链接关闭异常的表现

a8116255316年前 (2010-05-24)系统运维11

我们今天主要描述Hibernate用MySQL数据库时链接关闭异常的实际解决方案,愿在你学习Hibernate用MySQL数据库时链接关闭异常的实际解决方案中以起到抛砖引玉的作用,以下就是文章的详细内容介绍,望大家借鉴。

在一个项目中,客户要求除操作系统外全部使用免费软件,因此我使用了MySQL 4.0作为MySQL数据库服务器,其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、在MySQL数据库的url中加入autoReconnect=true

2、在每次调用getSession() *** 时判断session.isClosed()是否为真,若为真则调用session.reconnect();

3、在经过两天,事实证明前两种 *** 都不起作用的情况下,我在这个页面找到了第三种 *** ,即不使用Hibernate内置的连接池(Hibernate强烈推荐不使用但我以前一直在用),改用C *** 0连接池,这个连接池会自动处理MySQL数据库连接被关闭的情况。要使用C *** 0很简单,先从Hibernate里把c3p0-0.8.3.jar复制到项目的lib目录中,再在hibernate.properties里去掉hibernate.c3p0开头的那些属性的注释(使用缺省值或自己需要的数值),这样Hibernate就会自动使用C *** 0代替内置的连接池了。到目前为止前面的问题没有再出现过。

以前对Hibernate警告不要使用内置连接池作产品用途没有太放在心上,这次是一个教训,所以不论从稳定还是性能的考虑,都应该选择相对更加成熟的连接池。

update:除了连接池的原因,原先写的HibernateDAO类也有问题,在有些情况下一个session会被多个请求反复使用,现在已改正。另外,c3p0这个名字不是星球大战里那个机器人么?

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/20581.html

分享给朋友:

“Hibernate用MySQL数据库时链接关闭异常的表现” 的相关文章

windows 7系统开机提示press any key to restart的故障分析及解

windows 7系统开机提示press any key to restart的故障分析及解

Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...

如何设置Win 7通知栏重新显示电源按钮

如何设置Win 7通知栏重新显示电源按钮

有些使用本本的朋友可能会发现,右下角通知栏区域会无法显示电源按钮,导致在插上电源或者是使用电池的时候都无法进行区分。造成这种情况大部分都是因为使用了第三方修改过的系统版本或者对于系统优化过度,所以今天就来解决这个问题。 第一步:在开始菜单的搜索窗口输入“gpedit.msc”,进入组策略编辑器,依...

Skylake平台不能通过USB接口装windows 7系统

Skylake平台不能通过USB接口装windows 7系统

Intel会在2015年推出Broadwell、Skylake两代14nm处理器,前者可以使用9系芯片组,Skylake升级到了LGA1151插槽,需要搭配新的100系列芯片组,但初期的Skylake-S又不能超倍频,所以今年Q2季度开始会很混杂。Skylake一代会支持DDR4,100系列芯片组升...

windows 7禁用粘滞键(连续按 Shift 五次)的方法

windows 7禁用粘滞键(连续按 Shift 五次)的方法

我们都知道连续按 Shift 五次可以启用或关闭粘滞键,但是假如我们不需要粘滞键,想要将它禁用该怎么设置呢?现在小编就教你解决这个问题的方法吧。 具体操作步骤如下: 1、首先依次点击“开始—控制面板—轻松访问中心—使键盘更容易进行使用”项; 2、在弹出来的界面中,取消勾选“启用粘滞键”...

windows 7系统下磁盘出错该如何手动检测修复有哪些方法

windows 7系统下磁盘出错该如何手动检测修复有哪些方法

我们在使用Windows 7系统时,一些无意中的操作很可能导致磁盘出现一些小故障,例如系统文件损坏、软件安装过程中出问题、又或者是在传输文件时停电、断电等。通常遇到这些问题,系统都会启动磁盘自动修复功能,但有时系统自动修复不成功,就需要我们手动检测修复了,许多朋友还不知道如何手动修复磁盘,下面几种方...

windows 7系统安装遇到的问题及解决办法

windows 7系统安装遇到的问题及解决办法

问题1:屏幕出现Please wait...等待许久不见动静 解决方法:这是Windows 7安装开始时安装程序加载时的提示语。假如卡在这个地方无法进行下去,请检查电脑硬件是否正常工作。但是假如电脑本身配置较低,可能要多等一下,稍安勿躁。 问题2:屏幕卡住在Setup is copying...