之前网站隔一段时间就会报javax.servlet.ServletException: could not execute query错,郁闷的不得了,重启服务器后马上有好了,过一段时间之后又出现同样问题。一个月来都没有解决这个问题。今天终于解决了,得感谢uczy121的博客

原文如下

================================================================

MySQL+Hibernate下连接空闲8小时自动断开问题解决方案

前段时间刚完成一个公司内部管理项目,数据库为MySQL5.0,持久层使用Hibernate 3.1,没有使用额外的连接池,那么Hibernate会默认使用它自带的一个默认连接池,也就是 DriverManagerConnectionProvider。
  先在本机上调试都毫无问题,于是部署到服务器上,也都没什么问题。由于这是新网站,根本还没正式对外发布和宣传,所以头两天根本没人访问。等到第二天,我再次访问网站时,问题就出现了,错误信息如下:
org.hibernate.exception.JDBCConnectionException: could not execute query
-----------------------------------------------------------------------------------------------------------------------------------
当时也搞不清楚为什么,但重启Tomcat后就一切回复正常了,但是又过了一天,问题再次出现。仔细分析错误信息,问题肯定出在数据库连接部分,在网上查阅大量信息后,明确了问题的原因:MySQL对所有连接的有效时间默认为28800秒,正好8小时,也就是说,如果一个连接8小时没有请求和操作,就会自动断开;但是对于Hibernate来说,它的连接池并不知道它所管理的连接中是否有被MySQL断开的。如果一个程序要使用数据库连接,而 Hibernte的连接池分配一个已经被MySQL断开了的给程序使用,那么便会出现错误。
  为了证实确实是这个错误,我在本机上做了如下测试:首先启动Tomcat,网站能够正常打开;然后修改系统时间,往后调1天;然后再打开网站,同样的问题果然出现!MySQL + Hibernate架构相当普遍,所以这个问题也相当普遍,若读者也有这样的项目,建议做一下同样的测试,看看是否存在此问题!
  问题找到了,怎么解决呢?
  思路1:增大MySQL的连接有效时间;
  思路2:从程序自身出发,修改连接池的相关参数。
  显然,思路1是不可行的,一方面这个思路不可能保证这个问题绝对的解决,如果无访问时间够长,还是大于MySQL的连接有效时间,问题同样会发生;另一方面,一般情况下,我们都是将程序部署在别人服务器上,我们不可能去修改MySQL配置。那么只能从思路2入手了。
  经查资料发现,Hibernate支持如下的连接池:
   DriverManagerConnectionProvider:代表由Hibernate提供的默认的数据库连接池
   C3P0ConnectionProvider:代表C3P0连接池
   ProxoolConnectionProvider:代表Proxool连接池
   DBCPConnectionProvider:代表DBCP连接池
   DatasourceConnectionProvider:代表在受管理环境中由容器提供的数据源
  其中,默认连接池并不支持在分配一个连接时,测试其有效与否的功能,而C3P0、Proxool、DBCP都提供了这样的功能,正好可以解决上述问题。综合考虑各个连接池的效率、稳定性、易用性,决定换用Proxool,它确实在各方面表现优良,方便配置。
  下面就看看如何配置Proxool:
  1、Hibernate配置文件:
--------------------------------------------------Hibernate配置文件----------------------------------------------------------
<session-factory>
<property name="proxool.pool_alias">mysql</property>
<property name="proxool.xml">proxool.xml</property>
<property name="connection.provider_class">
   org.hibernate.connection.ProxoolConnectionProvider
</property>

<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<mapping resource="com/lab1000/jcom/pojo/Admin.hbm.xml" />
...
</session-factory>

------------------------------------------------------------------结束----------------------------------------------------------
其中各属性含义如下:
hibernate.connection.provider_class:指明使用Proxool连接池
hibernate.proxool.xml:指明Proxool配置文件所在位置,这里与Hibernate的配置文件在同一目录下
hibernate.proxool.pool_alias:指明要使用的proxool.xml中定义的proxool别名。
  2、Proxool配置文件(proxool.xml):
---------------------------------------------------------------proxool.xml------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>

<!-- proxool别名 -->
<alias>mysql</alias>

<!-- 数据库连接Url -->
<driver-url>
jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8

或者:
jdbc:mysql://localhost:3306?characterEncoding=gbk
</driver-url>

<!-- JDBC驱动名称 -->
<driver-class>com.mysql.jdbc.Driver</driver-class>

<!-- 数据库连接帐号 -->
<driver-properties>
<property name="user" value="root" />
<property name="password" value="password" />
</driver-properties>

<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 --><house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 -->
<maximum-new-connections>20</maximum-new-connections>

<!-- 最少保持的空闲连接数 --><prototype-count>3</prototype-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 --><maximum-connection-count>20</maximum-connection-count>
<!-- 最小连接数 -->
<minimum-connection-count>3</minimum-connection-count>

<!-- 在分配连接前后是否进行有效性测试,这个是解决本问题的关键 -->
<test-before-use>true</test-before-use>
<test-after-use>true</test-after-use>

<!-- 用于测试的SQL语句 --><house-keeping-test-sql>SELECT CURRENT_USER</house-keeping-test-sql>
</proxool>
</something-else-entirely>

--------------------------------------------------------结束-------------------------------------------------------------------
3、下载和安装Proxool的包文件
  下载地址:
http://proxool.sourceforge.net/download.html
  
下载后并解压后,将其中lib文件夹下的jar文件拷贝到你站点的WEB-INF/lib下
  自此,Proxool配置成功。重新启动Tomcat,再次做上述测试,问题解决。

转载自:

http://blog.sina.com.cn/s/blog_3dea8f9f0100equk.html

================================================================

经过修改之后本地修改时间测试通过,在观察服务器情况吧。wish~

酷玩网 网站重要修复相关推荐

  1. 51校园购==酷玩网

    晚上自习回来再qq上发现一则消息报道我校学生团队51校园购,我马上想到百度收录的第一条关于"51校园购"是酷玩网,今天的流量应该会很多,我打开51啦一看,居然有300多ip,太nb ...

  2. 酷壳网陈皓:由12306.cn谈谈网站性能技术

    导读:关于铁道部的火车票网络订票系统,这些天招致的骂声不断,当然,除了发泄不满,更多的技术人员选择了献技献策,纷纷从自己专长的角度提出解决之法.本文作者更是从订票业务.前端性能优化技术.后端性能优化技 ...

  3. 帝国CMS7.5仿《酷酷游戏网》源码/帝国CMS手游综合门户网站模板免费分享

    源码介绍 截图为演示数据填充的效果,源码实际并无数据,并无数据!!!!! 帝国CMS7.5仿<酷酷游戏网>源码,帝国CMS手游综合门户网站模板,外观大气漂亮的手机游戏下载.游戏资讯.游戏新 ...

  4. 酷6网证实80后员工猝死 内部邮件详解死因

    本文转载自 MSN ,原文地址: http://msn.ynet.com/view.jsp?oid=58168767 相关阅读: 多少钱也不能买我的命 --Leo 谈酷 6 程序员猝死 日前,有关酷 ...

  5. 酷贝网:站在淘宝肩上收钱

    酷贝网:站在淘宝肩上收钱 http://www.sina.com.cn 2008年05月02日 04:02  经济观察报 杨阳 和马云的淘宝抢地盘,是酷贝网董事长陈晓伟的野心. "从淘宝到酷 ...

  6. 酷壳网陈皓:Why C++?王者归来

    导读:此前,CSDN的一名博主赖勇浩发表了一篇博客<2012不宜进入的三个技术点>,文中提到ActionScript,Thread和C++,其中C++争议最大.对此,酷壳网陈皓发表了自己的 ...

  7. Drupal 网站漏洞修复以及网站安全防护加固方法

    2019独角兽企业重金招聘Python工程师标准>>> drupal是目前网站系统使用较多一个开源PHP管理系统,架构使用的是php环境+mysql数据库的环境配置,drupal的代 ...

  8. mac连接群晖的服务器会自动断开_酷玩家庭数码-mac苹果笔记本电脑如何访问群晖NAS文件?...

    pc电脑局域网邻居可以方便的找到同一个局域网内的NAS进行访问,互传文件等,那么mac苹果笔记本电脑如何访问群晖NAS文件? 本文主要分3个步骤来给大家展示: 群晖NAS设置 osx系统Finder设 ...

  9. codesys com库_CODESYS在线库,酷德网镜像站启用

    近期由于国内网络问题,造成 stroe.codesys.com 网站无法访问.在线库无法下载.为了不影响广大CODESYS用户的正常使用,酷德网建立stroe.codesys.com的国内镜像站: 主 ...

最新文章

  1. 使用cat /proc/进程id/maps 查看进程内存映射
  2. Centos 7 让docker飞一会儿
  3. linux日志手机,通过 shell 脚本 自动发送 log日志 文件内容 到手机邮箱
  4. jieba分词_从语言模型原理分析如何jieba更细粒度的分词
  5. ​数据集拥有自己的世界观?不,其实还是人的世界观
  6. PostgreSQL的 array_to_string 功能
  7. C++项目參考解答:求Fibonacci数列
  8. 栈溢出利用-----jmp esp
  9. java连接u盘_虚拟机VM6.0 LINUX redhat 挂接U盘,访问U盘
  10. eclipse svn不能忽略文件及文件夹,ignore设置无效 ?
  11. 如何建立DB2分区数据库?(转)
  12. java计算机毕业设计ssm办公耗材采购管理系统
  13. 查看linux系统日志某一天,linux系统日志查看
  14. 计算机软考知识点总结,系统分析师历年计算机软考复习知识点总结(10)
  15. 手用计算机怎么弄声音,计算器怎么调声音
  16. Python编程从入门到实践(第五章练习)
  17. 跨域问题No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  18. 精读:理论与实践融合 学者与干将统一
  19. minio 的python客户端工具
  20. 【PTA~L1-006 连续因子】

热门文章

  1. 2015Astar百度之星初赛 1005 序列变化
  2. python基于opencv的手势识别_求python opencv 手势识别源代码
  3. 【毕业论文】word 一键删除批注
  4. KDD 2017 参会报告
  5. 大学计算机课程学什么内容,计算机是学什么内容的 有哪些课程
  6. Abaqus CPU并行计算 加速计算信息汇总
  7. 微信公众号排查“该公众号提供的服务出现故障,请稍后再试”问题
  8. html页面中艺术字,html 生成艺术字
  9. 自动写稿机器人下载,写稿机器人有哪些,写稿机器人软件下载
  10. 计算机网络处理延时是什么原因,电脑网络延迟的解决方法是什么