`
sooxin
  • 浏览: 257230 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

c3p0连接数据库问题

    博客分类:
  • J2EE
阅读更多

最近项目用到了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>

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

分享到:
评论

相关推荐

    C3P0数据库连接池

    C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...

    c3p0数据库连接池所需jar包

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源...

    JDBC连接MySQL数据库,c3p0连接数据库

    java语言连接Mysql数据库。通过Eclipse集成开发工具,编写java类文件,实现JDBC连接。 通过c3p0连接数据库的三种方法,包括xml文件、properties文件。

    c3p0连接数据库及jndi链接例子

    在使用C3P0连接数据库时,你需要做以下几步: 1. 添加依赖:确保你的项目中包含了C3P0的库文件。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.mchange&lt;/groupId&gt; &lt;artifactId&gt;...

    c3p0数据库连接池案例

    **c3p0数据库连接池案例** 在Java开发中,数据库连接池是管理数据库连接的重要工具,它能够有效地提高数据库操作的效率并节省系统资源。C3P0是一款开源的数据库连接池组件,由Maurice Priess创建,被广泛应用于各种...

    数据库连接池c3p0jar包

    C3P0是一个开源的Java连接池实现,它提供了一种灵活且功能强大的数据库连接管理方式。在本文中,我们将深入探讨C3P0连接池的基本概念、工作原理以及如何在Java项目中配置和使用。 **C3P0简介** C3P0是由David Syer...

    jdbc使用c3p0连接池连接数据库的工具类

    jdbc使用c3p0连接池连接数据库,支持配置多个数据源,有相关的查询测试。

    c3p0数据库连接池

    - **异常处理**:c3p0提供了丰富的异常处理机制,有助于定位和解决数据库连接问题。 4. **使用c3p0的步骤** - 添加c3p0依赖到项目中,通常通过Maven或Gradle。 - 配置c3p0的数据源,如在`persistence.xml`或`...

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

    在这个场景中,我们将深入探讨如何使用C3P0连接池来与MySQL数据库进行交互,并结合log4j进行日志记录。 首先,要使用C3P0,你需要在项目中引入相应的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```...

    c3p0数据库连接池示例

    **c3p0数据库连接池**是Java应用中广泛使用的第三方数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。c3p0库通过提供连接池功能,使得数据库连接可以被多个并发请求共享,避免了...

    c3p0连接池连接数据库实例

    本实例将详细介绍如何使用C3P0连接池来连接数据库,以及所需的配置和使用步骤。 首先,我们需要理解数据库连接池的基本概念。数据库连接池是在应用服务器启动时预创建一定数量的数据库连接,然后在应用运行过程中,...

    C3P0连接池jar包(正式).zip

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源...

    C3P0连接池配置需要的jar包

    C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序在不关闭物理连接的情况下,管理和重用数据库连接,从而提高了应用程序的性能和效率。C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`...

    使用c3p0连接数据库实现增删改查

    使用c3p0连接数据库实现增删改查 c3p0是一个开源的数据库连接池,通过使用c3p0可以实现数据库连接的自动管理,提高数据库操作的效率和安全性。下面详细介绍了使用c3p0连接数据库实现增删改查的知识点: 1. 准备JAR...

    C3P0数据库连接池驱动.zip

    数据库连接池的基本原理就是为数据库建立一个缓冲池。在缓冲池中先创建指定数量的数据库连接,当有连接请求时就从缓冲池中取出处于“空闲”状态的连接,并将此连接标记为“忙碌”,直到该请求进程结束后,它所使用的...

    数据库连接C3P0

    C3P0用于连接数据库

    c3p0数据库连接池架包及源码

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包包含了C3P0的0.9.5.2版本,以及相关的依赖库。下面将详细介绍C3P0的功能、工作原理以及如何使用。 C3P0...

    c3p0连接池jar包

    - 自动管理连接:C3P0可以自动检测并修复失效的数据库连接,防止因长时间未使用的连接导致的问题。 - 连接池配置:允许开发者根据需求调整连接池的大小、超时时间等参数。 - 支持多线程:C3P0连接池在多线程环境...

Global site tag (gtag.js) - Google Analytics