关于hibernate 利用c3p0连接mysql 数据库

原创 2006年06月15日 13:25:00

        最近项目用到了hibernate3.0   c3po  mysql的数据层组合,开发部署非常顺利,但每天早上访问应用都抛出 Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception,但经过几次访问后又恢复正常,datasource配置如下:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass">
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="jdbcUrl">
   <value><![CDATA[jdbc:mysql://localhost:3306/WAP2?useUnicode=true&amp;characterEncoding=latin1]></value>
  </property>  
  <property name="user">
   <value>root</value>
  </property>
  <property name="password">
   <value>zznode</value>
  </property>  
  <property name="minPoolSize">
   <value>3</value>
  </property>
  <property name="maxPoolSize">
   <value>20</value>
  </property>
  <property name="maxStatements">
   <value>50</value>
  </property>
  <property name="maxIdleTime">
   <value>6000000</value>
  </property>   
 </bean>

根据问题现象初步认为是数据库连接出现问题,逐用异常作为关键词google(这是我遇见不能解决的问题时惯用的方法);得到了相关信息:1、mysql 数据库链接默认的超时时长为28800秒,2、c3p0 的几个参数意思;

       通过以上信息的收集隐隐知道了问题所在(mysql经过28800秒也就是8个小时后关掉空闲链接,而c3p0是经过6000000妙才断开链接,就有可能出现c3po保持的连接有可能已经被mysql关掉了,自然就出现了hibernate不能打开session,并且都是第二天一早就出错);为了验证我的想法,决定在开发机上重现这个错误;首先在mysql配置文件my.ini 加上 wait_timeout=30  让mysql经过30妙就关掉链接,重启应用,第一次访问成功,等待一分钟后访问果然出现同样的错误,说明问题诊断正确,着手修改配置如下:

  <property name="maxIdleTime">
   <value>28000</value>
  </property> 
  <property name="idleConnectionTestPeriod">
   <value>28000</value>
  </property> 

配置解释:28000<28800 使c3p0 在mysql关不连接之前关闭自己持有的链接,配置idleConnectionTestPeriod 参数使c3po每隔28000检查已有的连接是否可用,这样应该确保拿到的连接都是可用的,如果还不放心可以加上 testConnectionOnCheckout参数每当拿出连接的时候就检查一下是否可以,这个可能会使mysql有一定的性能牺牲;
  <property name="testConnectionOnCheckout">
   <value>true</value>
  </property>

     通过以上修改检测一段时间没有出现同样问题,问题解决!总结解决问题的三个步骤:收集相关信息、重现问题、解决测试。

Hibernate整合C3P0实现连接池

Hibernate整合C3P0实现连接池 Hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实现了数据源和J...
  • mercenarylin
  • mercenarylin
  • 2014年03月20日 11:33
  • 15040

java使用c3p0连接mysql

需要下载 c3p0-0.9.5.2.jar ,我放在tomcat的lib文件夹里。 C3P0cnn静态类 package www.wamgk.com; import java.beans.Pro...
  • zxh707wk
  • zxh707wk
  • 2017年01月09日 15:03
  • 1522

一次hibernate+c3p0+mysql连接池java.net.SocketException: Connection reset故障的解决笔记

hibernate 有自带的连接池,但大家用起来颇有微词,因为其稳定性以及性能都不太好。c3p0 连接池的性能和稳定性久经考验,所以用 hibernate 的朋友一般都使用 c3p0 的连接池。那么是...
  • defonds
  • defonds
  • 2014年12月18日 18:37
  • 10982

Java使用C3P0连接MySQL数据库查询

  • 2016年09月27日 10:21
  • 7KB
  • 下载

数据库连接池c3p0与Hibernate的整合

1、数据库连接池c3p0与Hibernate的整合      加入c3p0相关的jar文件 2、hibernate.cfg.xml的配置文件 org.hibernate.connection....
  • zbw18297786698
  • zbw18297786698
  • 2016年07月23日 13:25
  • 318

Hibernate c3p0 Mysql 配置注意

MySQL默认是自动关闭空闲超过8小时的连接,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client...
  • liuj2511981
  • liuj2511981
  • 2013年01月19日 21:37
  • 1017

hibernate mysql c3p0 详细配置

官方文档 :http://www.mchange.com/projects/c3p0/index.html 3
  • rosten
  • rosten
  • 2010年06月15日 19:48
  • 2826

hibernate中对c3p0连接池的配置

连接池,          作用: 管理连接;提升连接的利用效率!          常用的连接池: C3P0连接池   Hibernate自带的也有一个连接池,且对C3P0连接池也有支持! ...
  • miachen520
  • miachen520
  • 2016年08月12日 20:55
  • 1766

hibernate c3p0 连接无法释放 阻塞数据库操作

最近写的一个项目,发现每次启动tomcat进行几个数据库操作后就会卡住,重启tomcat又可以继续用,几个数据库操作后继续不可用。 在mysql中查询show processlist,发现这个项目的数...
  • nokiaisacat
  • nokiaisacat
  • 2016年04月23日 19:22
  • 1868

spring+hibernate+c3p0整合链接池配置-连接无法释放问题(已经解决)

以上配置是spring+hibernate+c3p0整合链接池配置,通过代码全注解的方式增加事物管理,连接池等 前不久一直被一个问题困扰着, getHibernateTemplate()....
  • yonglelaoren
  • yonglelaoren
  • 2014年06月06日 15:23
  • 11669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于hibernate 利用c3p0连接mysql 数据库
举报原因:
原因补充:

(最多只允许输入30个字)