`
hnylj
  • 浏览: 210708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谁来拯救C3P0的致命伤

阅读更多

这几天北京下着雨,虽然天气凉爽了,空气清新了,但我的项目生病了。。。。。。

 

项目采用Struts2+Spring2+ibatis2技术,已经上线一周时间,遇到致命的内伤,让我心悸让我忧。。。。。。

1.项目中使用C3P0作为数据库连接池,并利用Spring管理,其配置如下:

	<!-- c3p0连接池配置 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 用户名-->
		<property name="user" value="${username}"/>
		<!-- 用户密码-->
		<property name="password" value="${password}"/>
		<property name="driverClass" value="${driver_class}"/>
		<property name="jdbcUrl" value="${url}"/>
		<!-- 当连接池耗尽时候,一次获得连接数-->
		<property name="acquireIncrement" value="2"/>
		<!-- 连接池最大数 -->
		<property name="maxPoolSize" value="20"/>
		<!-- 连接池最小数-->
		<property name="minPoolSize" value="2"/>
		<!-- 初始化连接池大小 -->
		<property name="initialPoolSize" value="2"/>
		<!-- 当连接池连接耗尽时,客户端获取连接等待所需时间-->
		<property name="checkoutTimeout" value="3000"/>
		<!-- 当连接失效时,或得连接的次数,0为无限次(重连)-->
		<property name="acquireRetryAttempts" value="0"/>
	</bean>

2.项目采用Spring声明式事务管理,是使用BeanNameAutoProxyCreator自动生成事务代理的方式。配置如下:

<!--   配置事务拦截器  -->
<!-- 配置事务拦截器Bean -->  
    <bean id="transactionInterceptor"  
       class="org.springframework.transaction.interceptor.    
        TransactionInterceptor">  
        <property name="transactionManager" ref="transactionManager"/>  
       <property name="transactionAttributes">  
          <!-- 下面定义事务传播属性 -->  
           <props>    
                <prop key="*">PROPAGATION_REQUIRED</prop>  
           </props>  
        </property>  
   </bean>  
 
    <!-- 定义BeanNameAutoProxyCreator的Bean后处理器 -->  
   <bean class="org.springframework.aop.framework.autoproxy.    
    BeanNameAutoProxyCreator">  
        <property name="beanNames">   
            <list>  
                <value>transactionDAO</value>  
            </list>    
        </property>  
        <property name="interceptorNames">  
            <list>  
                <value>transactionInterceptor</value>    
           </list>  
        </property>  
    </bean> 

其中transactionDAO一个公共的DAO,封装了增加、删除、修改等操作,所以我只对该DAO做事务代理。

运行情况是:
刚开始的时候都非常好用,各个部件都运行正常,运行一两天就抛出如下异常:

1.
com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a 
resource from com.mchange.v2.resourcepool.BasicResourcePool@143073a -- timeout at 
awaitAvailable()

2.
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; 
nested exception is java.sql.SQLException: An attempt by a client to checkout a Connection 
has timed out.

曾今有一个项目,一次性向数据库插入1W条数据,也采用了C3P0,未曾有数据库连接超时的问题。

 

各位道友,你们是否也遇到这样的问题,又是如何解决的呢?

 

分享到:
评论
5 楼 似水流年依旧 2014-12-09  
我也遇到同样的问题了,请问怎么解决的。
4 楼 bobbie.zou 2011-07-20  
C3P0有配置test链接的属性
建议多看看C3P0连接池的属性
3 楼 cyf-123456 2009-11-16  
不知道兄弟最终如何解决的,遇到同样问题,真是头疼呀
2 楼 hnylj 2009-07-20  
项目使用的是Oracle

项目环境: tomcat5.5.27 + oracle10g + jdk1.5.0.07
1 楼 dengyin2000 2009-07-20  
这个是由于msyql的wait_timeout的设置, 如果在一定时间内mysql的connection没有使用的话mysql server会关闭掉connection的socket。 具体解决办法可以看参考我的这篇文章

http://dengyin2000.iteye.com/blog/417730

相关推荐

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

    c3p0支持多种方式来确保数据库连接的有效性,并能够在连接失效时尝试重新建立连接。这种机制对于提高应用程序的健壮性和用户体验非常重要,特别是在网络环境不稳定或数据库服务器偶尔出现故障的情况下。 1. **测试...

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

    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 &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt; &lt;!-- ...

    C3P0使用所需要的jar包

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

    c3p0所需jar包

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

    c3p0用法步骤

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

    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-0.9.2.1 jar包.rar

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

    c3p0完整的jar包以及配置文件

    总的来说,C3P0是一个强大且灵活的数据库连接池实现,通过合理的配置和使用,可以显著提升Java应用程序与数据库交互的效率和稳定性。这个压缩包提供了完整的C3P0库,以及可能的配置文件,为开发者提供了便利,使得...

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

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

    c3p0-0.9.2-pre1

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

    c3p0-0.9.5.5.jar.zip

    总的来说,c3p0作为一款强大的JDBC连接池,不仅提供了基本的数据库连接管理,还具备许多高级特性,能有效提升Java数据库应用的性能和稳定性。通过合理配置和使用,开发者可以充分利用c3p0的优势,打造高效、可靠的...

    C3P0-jar包和依赖包.zip

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

    数据库连接池c3p0jar包

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

Global site tag (gtag.js) - Google Analytics