Hibernate中对于Mysql数据库长时间闲置连接故障解决方法

新开发一个在线考试管理系统网站http://zjsx0575.vicp.net,结果第二天登录网站发现如下错误信息

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.hibernate.exception.JDBCConnectionException: could not execute query
 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 org.hibernate.loader.Loader.doList(Loader.java:2148)
 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
 org.hibernate.loader.Loader.list(Loader.java:2024)
 org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
 org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
 org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
 org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
 org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
 com.futuremap.dao.hibernate.UserinfoDaoHibernate.findUserInfoByUserName(UserinfoDaoHibernate.java:52)
 com.futuremap.service.impl.UserServiceImpl.findUserInfoByUserName(UserServiceImpl.java:36)
 com.futuremap.service.web.servlet.LoginChecker.doGet(LoginChecker.java:73)
 com.futuremap.service.web.servlet.LoginChecker.doPost(LoginChecker.java:132)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.

上网一查Mysql的帮助文档发现mysql中有一个设置wait_outtim 为28800相当于8个小时,我的数据库层是采用HIBERNATE,查询了HIBERNATE的资料才发现一个问题,当mysql失去连接以后没有作为HIBERNATE没有检测到连接已经中断,导致产生上述的错误信息。

办法有很多,可以增加wait_timeout的时间,减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值,定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。

想到Hibernate可以使用C3P0的连接池因此可以对C3P0进行配置。

首先要导入c3p0包,我采用的是hibernate3.1的版本,你可以在myeclipse中找到这个文件,c3p0-0.9.0.jar。连接到项目中启动TOMCAT结果出现com/mchange/v2/c3p0/PoolConfig的问题,由于比较匆忙所以忘记了把文件放入WebRoot/WEB-INF/lib导致出现如此的问题。

以下是c3p0的配置文件。

  <property name="hibernate.connection.pool_size">1</property>
  <property name="hibernate.c3p0.max_size">2</property>
  <property name="hibernate.c3p0.min_size">2</property>
  <property name="hibernate.c3p0.timeout">5000</property>
  <property name="hibernate.c3p0.max_statements">100</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <property name="hibernate.c3p0.validate">false</property>

 

你可能感兴趣的:(Hibernate中对于Mysql数据库长时间闲置连接故障解决方法)