`
125343158
  • 浏览: 5602 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

最近项目用到了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数据源 连接MySQL数据库

    博文链接:https://wxinpeng.iteye.com/blog/203088

    配置Hibernate使用C3P0连接池

    Hibernate作为一款强大的ORM(对象关系映射)框架,提供了与多种数据库连接池的集成,其中C3P0是一个常用的连接池实现。本篇文章将详细介绍如何配置Hibernate以使用C3P0连接池。 1. **C3P0简介** C3P0是一个开源的...

    SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip

    在本项目"SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip"中,开发者使用了SpringMVC4作为表现层,Spring4作为控制层和服务层,Hibernate4作为持久层,c3p0作为数据库连接池,以及MySQL作为数据库。...

    C3P0连接池配置需要的jar包

    `hibernate-c3p0`模块使Hibernate能够利用C3P0连接池来管理数据库连接,从而提高性能和并发处理能力。这个特定版本(4.0.0.Final)可能适用于Hibernate 4.x系列,它提供了C3P0连接池的配置和集成方法。 3. **...

    数据库连接池c3p0jar包

    C3P0支持多种数据库,包括MySQL、Oracle、PostgreSQL等,并且与Hibernate、Spring等框架有良好的集成。 **C3P0的工作原理** 1. **连接初始化**:当应用程序启动时,C3P0会根据配置参数预先创建一定数量的数据库连接...

    Hibernatec3p0配置数据源jar包

    c3p0库提供了一种高效且可定制化的数据库连接池服务,它可以创建并维护一个数据库连接池,使得多个请求可以复用已建立的数据库连接,而不是每次都创建新的连接,这大大降低了数据库操作的开销。c3p0提供了许多配置...

    SSH - Struts2 + Spring4 + Hibernate4 + c3p0 + Mysql.rar

    这个项目可能涵盖了用户登录注册、数据展示、CRUD操作等基本功能,通过Struts2接收和响应用户请求,Spring4管理业务逻辑和依赖,Hibernate4处理数据持久化,c3p0优化数据库连接,MySQL存储所有数据。开发者可以通过...

    hibernate架包+c3p0+

    标题中的“hibernate架包+c3p0”指的是在Java开发中使用Hibernate ORM框架结合C3P0连接池来管理数据库连接的技术组合。Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作...

    c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接

    尤其是在配合ORM框架如Hibernate时,c3p0能够提供高效的数据库连接管理和自动重连机制,有效提升系统的稳定性和性能。本文将深入探讨c3p0的自动重连机制,并结合实际应用场景中的配置示例进行详细介绍。 #### c3p0 ...

    c3p0配置需要jar包

    Hibernate-c3p0这个模块则提供了与C3P0连接池的整合,使得在使用Hibernate进行数据库操作时,可以利用C3P0的连接池管理功能,提升性能。 配置C3P0的过程主要包括以下步骤: 1. **引入依赖**:将上述两个JAR文件...

    使用c3p0简化链接数据库链接

    **使用C3P0简化数据库连接** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要优点在于它的易用性和灵活性,使得开发者无需在XML配置文件中设置大量复杂的参数...

    c3p0连接池jar包

    7. **多数据库支持**:C3P0支持多种主流的数据库,包括MySQL、Oracle、PostgreSQL、SQL Server等,具有良好的兼容性。 8. **线程安全**:C3P0的设计保证了在多线程环境下的安全性,用户无需担心并发访问时的连接...

    c3p0连接池jar

    C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接上的管理机制,以提高应用程序的性能和效率。C3P0是基于JDBC的数据源实现,允许应用程序通过配置参数来优化数据库...

    c3p0连接池使用所需jar包

    1. **连接管理**:C3P0可以自动创建、测试、回收和关闭数据库连接,避免了手动管理连接的繁琐工作,降低了系统资源的消耗。 2. **连接池大小控制**:可以设置最小和最大连接数,确保在高并发时有足够的连接,同时...

    c3p0连接数据jar包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...同时,C3P0与其他ORM框架(如Hibernate)和Spring框架集成良好,可以方便地在这些框架中使用C3P0作为连接池。

    ssh3中使用c3p0

    C3P0是一个流行的开源JDBC连接池,它为SSH3提供了数据库连接管理的功能,提高了数据库连接的复用性和效率。 首先,我们需要了解C3P0的基本概念。C3P0是一个基于JDBC的连接池,它实现了数据源和JNDI绑定,可以为多种...

    c3p0 jar 包

    c3p0 jar 包是 Java 开发中用于管理数据库连接的重要工具,通过引入 mchange-commons-java 和 c3p0-oracle-thin-extras 相关库,它可以提供高效、稳定且可定制的数据库连接池服务。无论是小型项目还是大型企业级应用...

Global site tag (gtag.js) - Google Analytics