最近项目用到了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&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>
通过以上修改检测一段时间没有出现同样问题,问题解决!总结解决问题的三个步骤:收集相关信息、重现问题、解决测试。
分享到:
相关推荐
博文链接:https://wxinpeng.iteye.com/blog/203088
Hibernate作为一款强大的ORM(对象关系映射)框架,提供了与多种数据库连接池的集成,其中C3P0是一个常用的连接池实现。本篇文章将详细介绍如何配置Hibernate以使用C3P0连接池。 1. **C3P0简介** C3P0是一个开源的...
在本项目"SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip"中,开发者使用了SpringMVC4作为表现层,Spring4作为控制层和服务层,Hibernate4作为持久层,c3p0作为数据库连接池,以及MySQL作为数据库。...
`hibernate-c3p0`模块使Hibernate能够利用C3P0连接池来管理数据库连接,从而提高性能和并发处理能力。这个特定版本(4.0.0.Final)可能适用于Hibernate 4.x系列,它提供了C3P0连接池的配置和集成方法。 3. **...
C3P0支持多种数据库,包括MySQL、Oracle、PostgreSQL等,并且与Hibernate、Spring等框架有良好的集成。 **C3P0的工作原理** 1. **连接初始化**:当应用程序启动时,C3P0会根据配置参数预先创建一定数量的数据库连接...
c3p0库提供了一种高效且可定制化的数据库连接池服务,它可以创建并维护一个数据库连接池,使得多个请求可以复用已建立的数据库连接,而不是每次都创建新的连接,这大大降低了数据库操作的开销。c3p0提供了许多配置...
在实际应用中,C3P0通常与其他持久层框架(如Hibernate、MyBatis)配合使用,通过它们提供的数据源配置接口来集成C3P0,实现数据库连接的高效管理。 总的来说,C3P0作为一款成熟的数据库连接池,以其丰富的配置选项...
这个项目可能涵盖了用户登录注册、数据展示、CRUD操作等基本功能,通过Struts2接收和响应用户请求,Spring4管理业务逻辑和依赖,Hibernate4处理数据持久化,c3p0优化数据库连接,MySQL存储所有数据。开发者可以通过...
标题中的“hibernate架包+c3p0”指的是在Java开发中使用Hibernate ORM框架结合C3P0连接池来管理数据库连接的技术组合。Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作...
尤其是在配合ORM框架如Hibernate时,c3p0能够提供高效的数据库连接管理和自动重连机制,有效提升系统的稳定性和性能。本文将深入探讨c3p0的自动重连机制,并结合实际应用场景中的配置示例进行详细介绍。 #### c3p0 ...
Hibernate-c3p0这个模块则提供了与C3P0连接池的整合,使得在使用Hibernate进行数据库操作时,可以利用C3P0的连接池管理功能,提升性能。 配置C3P0的过程主要包括以下步骤: 1. **引入依赖**:将上述两个JAR文件...
**使用C3P0简化数据库连接** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要优点在于它的易用性和灵活性,使得开发者无需在XML配置文件中设置大量复杂的参数...
7. **多数据库支持**:C3P0支持多种主流的数据库,包括MySQL、Oracle、PostgreSQL、SQL Server等,具有良好的兼容性。 8. **线程安全**:C3P0的设计保证了在多线程环境下的安全性,用户无需担心并发访问时的连接...
C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接上的管理机制,以提高应用程序的性能和效率。C3P0是基于JDBC的数据源实现,允许应用程序通过配置参数来优化数据库...
1. **连接管理**:C3P0可以自动创建、测试、回收和关闭数据库连接,避免了手动管理连接的繁琐工作,降低了系统资源的消耗。 2. **连接池大小控制**:可以设置最小和最大连接数,确保在高并发时有足够的连接,同时...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...同时,C3P0与其他ORM框架(如Hibernate)和Spring框架集成良好,可以方便地在这些框架中使用C3P0作为连接池。
C3P0是一个流行的开源JDBC连接池,它为SSH3提供了数据库连接管理的功能,提高了数据库连接的复用性和效率。 首先,我们需要了解C3P0的基本概念。C3P0是一个基于JDBC的连接池,它实现了数据源和JNDI绑定,可以为多种...