`

dbcp数据库连接超时解决方案

阅读更多
 

1.  问题

Could not open Hibernate Session for transaction; JDBC begin failed

2.  解决方案

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

2.1方案一

1)   增加 MySQL 的 wait_timeout 属性的值。修改 /etc/mysql/my.cnf 文件,在 [mysqld] 节中

     # Set a connection to wait 8 hours in idle status.

   wait_timeout = 86400

2)   减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值

修改 c3p0 的配置文件,设置<property name="maxIdleTime" value="3600" />

3)   定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开

修改 c3p0 的配置文件,设置:

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

                  <property name="preferredTestQuery"  value="'SELECT 1'"/>

                  <property name="idleConnectionTestPeriod" value="18000" />

                  <property name="testConnectionOnCheckout" value="true" />

                  <!-- other properties -->

       </bean>

如果其他数据支持重连接可以在URL后加上:

jdbc:mysql://localhost:3306/xxx?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true

2.2方案二

在spring配置文件中配置数据源的时候,添加如下几项属性配置:

  <!-- 下面三项是确保获得的连接是有效的 -->

  <property name="testOnBorrow" value="true"></property>

  <property name="testOnReturn" value="true"></property>

  <property name="testWhileIdle" value="true"></property>

  <property name="validationQuery" value="SELECT 1"></property>

  <property name="timeBetweenEvictionRunsMillis" value="检查无效连接的时间间隔"></property>

  <property name="minEvictableIdleTimeMillis" value="连接闲置的时间"></property>

2.3方案三

<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"       

        destroy-method="close">      

        <propertyname="driverClassName"value="com.mysql.jdbc.Driver" />     

        <propertyname="url"value="jdbc:mysql://192.168.0.1:3306/mysqldb"/>

        <propertyname="username"value="root"/>     

        <propertyname="password"value="1234.abcd"/>

       <!-- 设定最大连接数  -->

       <propertyname="maxActive"><value>500</value></property>

       <!-- 设定最大空闲时间(毫秒) -->

       <propertyname="maxIdle"><value>10000</value></property>

       <!-- 设定最大等待时间(毫秒) -->

       <propertyname="maxWait"><value>1000</value></property>

       <!-- 超时自动收回 -->

       <propertyname="removeAbandoned"><value>true</value></property>

       <!--

                  超时时间(以秒数为单位)设置超时时间有一个要注意的地方,

                  超时时间=现在的时间-程序中创建Connection的时间,如果

                  maxActive比较大,比如超过100,那么removeAbandonedTimeout

                  可以设置长一点比如180, 也就是三分钟无响应的连接进行回收,

                  当然应用的不同设置长度也不同。

       -->

       <propertyname="removeAbandonedTimeout"><value>180</value></property>

       <!-- 在自动回收超时连接的时候打印连接的超时错误 -->

       <propertyname="logAbandoned"><value>true</value></property>

    </bean>

 本文来源于:http://blog.csdn.net/chenxiang0207/article/details/8252590

分享到:
评论

相关推荐

    DBCP数据库连接池jar包.zip

    对于初学者来说,通过这个压缩包可以了解数据库连接池的基本工作原理和使用方式,对于开发者而言,它可以提供基本的数据库连接管理功能,但可能需要在大型高并发环境中考虑其他更高效的解决方案。

    DBCP数据库连接池

    **DBCP数据库连接池详解** 在Java开发中,数据库连接池是不可或缺的一部分,它提高了数据库操作的性能和效率。DBCP(Database Connection Pool)是由Apache软件基金会提供的一个开源的数据库连接池实现,它是...

    DBCP数据库连接池.pdf

    DBCP是Java应用程序中常用的数据库连接池解决方案之一。 在上述描述中,我们看到一个通过XML配置文件来管理多个数据库连接池的例子。配置文件`config.xml`包含了两个连接池的设置,每个连接池都有自己的名称、...

    DBCP(数据库连接池)

    总的来说,DBCP作为一款老牌的数据库连接池工具,对于小型项目或者学习使用是足够的,但对于大型、高并发的应用场景,可能需要考虑更先进的解决方案。理解并掌握数据库连接池的工作原理和使用方法,对优化Java应用...

    开源数据库连接池dbcp

    总的来说,DBCP是一个成熟的开源数据库连接池解决方案,对于处理数据库连接管理和性能优化具有重要作用。了解并熟练掌握DBCP的使用和配置,对于提升Java应用程序的数据库性能和稳定性至关重要。在实际开发中,结合...

    dbcp连接数据库

    同时,由于DBCP是开源的,社区对其支持良好,遇到问题时可以查阅相关文档或社区讨论找到解决方案。不过,随着技术的发展,如今更流行的数据库连接池有HikariCP、C3P0和Druid,它们在性能和功能上可能更具优势。

    用apache的dbcp来建立数据库连接池

    总的来说,Apache DBCP提供了一个简单易用且功能强大的数据库连接池解决方案,通过合理配置和使用,可以有效地提升Java应用处理数据库操作的效率和稳定性。在学习和实践中,应深入了解其各项配置参数及使用场景,以...

    数据库连接池驱动包_数据库连接池驱动包_

    例如,Druid 因其全面的功能和良好的性能监控受到广泛欢迎,而 C3P0 和 DBCP2 则是较早的、经过验证的解决方案。在使用时,需要根据项目规模、性能要求以及对监控的需求来决定采用哪个连接池。同时,为了保证数据库...

    数据库连接池所需jar包

    总的来说,Apache Commons DBCP与其他两个库结合使用,为Java应用程序提供了高效且可靠的数据库连接池解决方案。了解并熟练使用这些jar包,能够帮助开发者优化数据库性能,提高系统稳定性和响应速度。在实际开发中,...

    org.apache.commons.dbcp.BasicDataSource的解决方法

    下面我们将详细探讨这些问题及其解决方案。 首先,`BasicDataSource`是DBCP库中的核心类,它实现了`javax.sql.DataSource`接口,用于创建、管理和维护数据库连接池。要使用它,你需要在应用的配置文件(如`web.xml`...

    apache数据库连接池JAR包

    DBCP解决了这个问题,它维护了一个连接池,预先创建了一定数量的数据库连接,当应用程序需要时,可以从池中获取一个已存在的连接,使用完毕后归还到池中,而不是直接关闭。这样既减少了数据库连接的创建次数,也避免...

    数据库连接池

    DBCP(Database Connection Pool)是Apache Commons项目下的一个子项目,提供了一个实现数据库连接池的解决方案。标题中的"数据库连接池"指的是这个用于管理和复用数据库连接的机制,而描述中的"DBCP方式"则是指具体...

    数据库连接 数据库连接

    4. 事务隔离级别:包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),不同的隔离级别对应不同的并发问题解决方案。 四、安全性 1. 用户认证:...

    数据库连接池包(proxool.jar)

    在实际使用中,开发者可以根据项目的具体需求选择合适的数据库连接池实现,而Proxool作为一个成熟且易用的解决方案,对于初学者来说,是一个很好的学习和实践的起点。通过深入理解Proxool的原理和使用方法,不仅可以...

    dbcp连接池所需jar(commons-collections-3.1.jar,commons-dbcp-1.2.jar,commons-pool-1.6.)

    DBCP(Database Connection Pool)是Apache组织提供的一个开源...因此,随着技术的发展,一些项目可能已经转向了更高效的连接池解决方案。不过,对于理解数据库连接池的工作原理和使用,DBCP仍然是一个很好的学习起点。

    commons-dbcp-1.4

    这个版本是在2009年发布的,它基于Jakarta DBCP项目,并且是Apache Commons的一部分,提供了一套完善的数据库连接池解决方案。Apache Commons DBCP 主要用于提高应用程序的性能,因为它允许重复使用数据库连接,避免...

    jsp毕业设计——JSP数据库连接池的研究与实现(源代码+论文).zip

    论文部分可能涵盖了对数据库连接池原理的深入分析,对比不同连接池工具的性能,以及在JSP项目中实施的具体步骤和遇到的问题及解决方案。源代码则提供了实际的实现示例,有助于理解理论知识在实际开发中的应用。 总...

    有关struts中的数据库连接池问题解决

    ### 有关Struts中的数据库连接池问题解决 在开发基于Web的应用程序时,尤其是在使用Struts框架这样的MVC(Model-View-Controller)架构中,数据库连接管理是至关重要的一个环节。由于数据库连接是一种关键、有限且...

    commons-dbcp-1.2.2

    这个版本的DBCP可能不包含最新的特性和修复,因此对于新项目,通常建议使用更现代的版本,如DBCP2或者其他的数据库连接池解决方案,如HikariCP、C3P0等,它们提供了更好的性能和更多的功能。 在部署应用程序时,将`...

Global site tag (gtag.js) - Google Analytics