Hibernate中對於Mysql資料庫長時間閑置串連故障解決方案

來源:互聯網
上載者:User

新開發一個線上考試管理系統網站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>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.