`
fantaxy025025
  • 浏览: 1309241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

谁来拯救C3P0的致命伤

 
阅读更多

 

c3p0问题多多,怪不得要淘汰了。

 

 

# 连接池大了,管理就出问题。

c3p0连接错误 An attempt by a client to checkout a Connection has timed out.

c3p0作为连接池,报:java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. 
网上查了很久,有人说是checkoutTimeout太短的原因,(Default: 0)于是由原来的1000改为2000,问题还是未解决。 
然后找了份没有问题的配置作了些对比,发现我的maxPoolSize=100显得有些大,于是改为默认的15.再测试,居然没有问题了。后来再试了大一点的60,也没有问题。

dataSource.setMaxPoolSize(30); // 连接池中保留的最大链接数,默认是15
我的是30就报这个问题了。。。不晓得什么原因。。。
我用loadrunner跑了下。。20个用户,跑了三分钟之后,再次登录系统就这个错误

 

# 长时间不进行数据库操作,Connection会断开

程序如果长时间不进行数据库操作,那么数据源中的 Connection 很可能已经断开。其原因有可能是防火墙,或者连接的数据库设置的超时时间。这里使用的是 C3P0 连接 oracle 数据库,引起的异常信息为:

异常抛出的地方为 Spring 的事务管理 transactionManager,而并非程序代码。即便捕捉到异常,使用 sessionFactory.openSession 也会抛出如下异常:

这个解决方法应该不行的:java.sql.SQLException: 关闭的连接 解决办

 

# 连接超时Connection has timed out.

java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

解决办法:

** 是Spring中配置c3p0的时候,有一个配置属性是checkoutTimeout,把这个配置属性去掉就正常了。(fantaxy备注:这个不行的)

参考这里:【c3p0】 java.sql.SQLException: An attempt by a client to checkout a Connection...

** 配置maxIdleTime

参考这里:Mysql Broken pipe问题的解决办法。

这个方法貌似也不行,虽然写的原理很清楚也很不错。

这个是由于msyql的wait_timeout的设置, 如果在一定时间内mysql的connection没有使用的话mysql server会关闭掉connection的socket。 具体解决办法可以看参考我的这篇文章 
http://dengyin2000.iteye.com/blog/417730

 

# c3p0 You can’t operate on a closed Connection解决办法

没有做任何关闭操作, 使用 createstatement,

maxStatements=10 难道是这个配小了

connection关闭了之后执行createStatement导致的。

根据我们做过大规模测试的结果,稳定的开源数据库连接池只有jboss-datasource和druid。

推荐使用阿里巴巴开源的数据库连接池Druid。性能比BoneCP好,功能更齐全,经过大规模的部署,更稳定。https://github.com/AlibabaTech/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

参考这里:http://www.oschina.net/question/220489_80358

 

解决方法:

c3p0连接池,You can't operate on a closed Connection [问题点数:40分,结帖人ypfei2008]

我是本机测试的,connection.close就会出这个错
删掉connection.close就不会
在数据库那边show processlist发现c3p0正常工作的,一开始有初始化配置的connection

 

小结:

很不好啊!

 

 

+

+

=

=

=
=

分享到:
评论

相关推荐

    c3p0所依赖的jar包

    总结来说,C3P0是一个强大的数据库连接池管理工具,它通过合理的连接复用、管理策略以及灵活的配置,极大地提升了应用程序处理数据库的能力。正确理解和使用C3P0,对于优化Java应用的数据库性能至关重要。

    c3p0-0.9.5.1

    总的来说,C3P0是一个强大的数据库连接池实现,对于需要高效、稳定地处理数据库连接的Java应用,它是一个重要的组件。0.9.5.1版本的发布意味着对这个工具的持续改进和维护,以适应不断变化的开发需求。在使用这个...

    C3P0相关的JAR包

    - `c3p0.jar`:包含了C3P0的核心连接池功能。 - `mchange-commons-java.jar`:Mchange Commons Java库,提供了一些通用工具类和异常处理。 - `mysql-connector-java.jar`(或其他数据库驱动JAR):根据你的数据库...

    C3P0连接池配置需要的jar包

    C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`hibernate-c3p0-4.0.0.Final[1].jar`以及`mchange-commons-java-0.2.3.4.jar`。 1. **c3p0-0.9.2.1.jar**: 这是C3P0的主要库文件,包含了C3P0的...

    c3p0连接池jar包

    C3P0连接池是Java开发中常用的数据库连接池组件,它由M-Fenyes创建并维护,旨在提供一个高效、灵活且稳定的数据库连接管理工具。数据库连接池在多线程应用中扮演着重要角色,它能有效地管理和复用数据库连接,避免...

    c3p0的jar包

    1. **添加依赖**:在项目中引入C3P0的JAR包,例如`c3p0-0.x.y.jar`,这通常可以通过Maven或Gradle等构建工具来实现。 2. **初始化配置**:创建一个C3P0的数据源实例,设置相关的配置属性,例如数据库URL、用户名、...

    C3P0使用,C3P0源码及实例

    在实际应用中,我们可以使用Spring框架来集成C3P0,以下是一个简单的Spring配置示例: ```xml <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- ...

    C3P0使用所需要的jar包

    C3P0是一款开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助我们更有效地管理和使用数据库连接,避免频繁创建和关闭连接导致的性能损失。下面将...

    c3p0所需jar包

    C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...

    C3P0的jar包

    C3P0的主要目标是通过提供自动的资源管理和故障恢复功能,来帮助Java开发者更方便地管理和维护数据库连接,从而提高应用程序的性能和可靠性。 C3P0的核心特性包括: 1. **连接池管理**:C3P0可以管理多个数据库...

    C3p0c3p0-0.9.5.5三个包

    C3p0c3p0-0.9.5.5三个jar包使用,匹配mysql8.0等信息,包含mchange-commons-java-0.2.19.jar、c3p0-oracle-thin-extras-0.9.5.5.jar、c3p0-0.9.5.5.jar

    c3p0用法步骤

    标题:"c3p0用法步骤" 描述:"这是我学习过程中积累的学习笔记,希望对大家有用" 标签:"c3p0" 知识点详述: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC连接池的特性,如:自动重连、自动...

    springMVC整合C3P0连接池

    整合SpringMVC与C3P0能有效地优化数据库操作,提高应用的性能和稳定性。 首先,我们需要了解C3P0的基本概念。C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其...

    c3p0-0.9.2.1 jar包.rar

    C3P0是一款开源的Java连接池,全称为Comming Soon Connection Pool,它是一个支持JDBC的数据库连接池组件。这个组件的主要作用是提高数据库访问的效率,通过复用已经建立的数据库连接,减少频繁创建和关闭连接所造成...

    C3P0用到的jar包和配置文件.zip

    C3P0需要这个驱动来创建和管理数据库连接。 配置文件`c3p0-config.xml`是C3P0的配置文件,通过它可以设置C3P0连接池的各种参数,如初始连接数量、最大连接数量、超时时间、测试查询等。例如,你可以设置`...

    c3p0-0.9.2-pre1

    1. **Maven依赖**:在Maven项目中,需要添加以下依赖来引入c3p0库: ```xml <groupId>com.mchange</groupId> <artifactId>c3p0 <version>0.9.2-pre1 ``` 2. **配置文件**:c3p0的配置通常通过`c3p0....

    C3P0-jar包和依赖包.zip

    C3P0的JAR文件提供了所有必要的类和接口,使得开发者可以配置并使用C3P0来管理数据库连接。在解压这个文件后,开发者需要将解压出的JAR文件添加到项目的类路径中,以便在代码中引用C3P0的相关类。 2. **mchange-...

    数据库连接池c3p0jar包

    总的来说,C3P0作为一款成熟的数据库连接池,对于Java开发者来说,是一个值得信赖的工具,可以帮助我们更有效地管理和使用数据库连接,提升应用程序的性能和可靠性。在实际项目中,根据具体需求合理配置C3P0,可以更...

Global site tag (gtag.js) - Google Analytics