目录(?)
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&characterEncoding=utf-8&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数据库连接池详解** 在Java开发中,数据库连接池是不可或缺的一部分,它提高了数据库操作的性能和效率。DBCP(Database Connection Pool)是由Apache软件基金会提供的一个开源的数据库连接池实现,它是...
DBCP是Java应用程序中常用的数据库连接池解决方案之一。 在上述描述中,我们看到一个通过XML配置文件来管理多个数据库连接池的例子。配置文件`config.xml`包含了两个连接池的设置,每个连接池都有自己的名称、...
总的来说,DBCP作为一款老牌的数据库连接池工具,对于小型项目或者学习使用是足够的,但对于大型、高并发的应用场景,可能需要考虑更先进的解决方案。理解并掌握数据库连接池的工作原理和使用方法,对优化Java应用...
总的来说,DBCP是一个成熟的开源数据库连接池解决方案,对于处理数据库连接管理和性能优化具有重要作用。了解并熟练掌握DBCP的使用和配置,对于提升Java应用程序的数据库性能和稳定性至关重要。在实际开发中,结合...
同时,由于DBCP是开源的,社区对其支持良好,遇到问题时可以查阅相关文档或社区讨论找到解决方案。不过,随着技术的发展,如今更流行的数据库连接池有HikariCP、C3P0和Druid,它们在性能和功能上可能更具优势。
总的来说,Apache DBCP提供了一个简单易用且功能强大的数据库连接池解决方案,通过合理配置和使用,可以有效地提升Java应用处理数据库操作的效率和稳定性。在学习和实践中,应深入了解其各项配置参数及使用场景,以...
例如,Druid 因其全面的功能和良好的性能监控受到广泛欢迎,而 C3P0 和 DBCP2 则是较早的、经过验证的解决方案。在使用时,需要根据项目规模、性能要求以及对监控的需求来决定采用哪个连接池。同时,为了保证数据库...
总的来说,Apache Commons DBCP与其他两个库结合使用,为Java应用程序提供了高效且可靠的数据库连接池解决方案。了解并熟练使用这些jar包,能够帮助开发者优化数据库性能,提高系统稳定性和响应速度。在实际开发中,...
下面我们将详细探讨这些问题及其解决方案。 首先,`BasicDataSource`是DBCP库中的核心类,它实现了`javax.sql.DataSource`接口,用于创建、管理和维护数据库连接池。要使用它,你需要在应用的配置文件(如`web.xml`...
DBCP解决了这个问题,它维护了一个连接池,预先创建了一定数量的数据库连接,当应用程序需要时,可以从池中获取一个已存在的连接,使用完毕后归还到池中,而不是直接关闭。这样既减少了数据库连接的创建次数,也避免...
DBCP(Database Connection Pool)是Apache Commons项目下的一个子项目,提供了一个实现数据库连接池的解决方案。标题中的"数据库连接池"指的是这个用于管理和复用数据库连接的机制,而描述中的"DBCP方式"则是指具体...
4. 事务隔离级别:包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),不同的隔离级别对应不同的并发问题解决方案。 四、安全性 1. 用户认证:...
在实际使用中,开发者可以根据项目的具体需求选择合适的数据库连接池实现,而Proxool作为一个成熟且易用的解决方案,对于初学者来说,是一个很好的学习和实践的起点。通过深入理解Proxool的原理和使用方法,不仅可以...
DBCP(Database Connection Pool)是Apache组织提供的一个开源...因此,随着技术的发展,一些项目可能已经转向了更高效的连接池解决方案。不过,对于理解数据库连接池的工作原理和使用,DBCP仍然是一个很好的学习起点。
这个版本是在2009年发布的,它基于Jakarta DBCP项目,并且是Apache Commons的一部分,提供了一套完善的数据库连接池解决方案。Apache Commons DBCP 主要用于提高应用程序的性能,因为它允许重复使用数据库连接,避免...
论文部分可能涵盖了对数据库连接池原理的深入分析,对比不同连接池工具的性能,以及在JSP项目中实施的具体步骤和遇到的问题及解决方案。源代码则提供了实际的实现示例,有助于理解理论知识在实际开发中的应用。 总...
### 有关Struts中的数据库连接池问题解决 在开发基于Web的应用程序时,尤其是在使用Struts框架这样的MVC(Model-View-Controller)架构中,数据库连接管理是至关重要的一个环节。由于数据库连接是一种关键、有限且...
这个版本的DBCP可能不包含最新的特性和修复,因此对于新项目,通常建议使用更现代的版本,如DBCP2或者其他的数据库连接池解决方案,如HikariCP、C3P0等,它们提供了更好的性能和更多的功能。 在部署应用程序时,将`...