c3p0连接mysql 数据库(解决掉线问题) 2009-06-05 17:47最近项目用到了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> 通过以上修改检测一段时间没有出现同样问题,问题解决!总结解决问题的三个步骤:收集相关信息、重现问题、解决测试
相关推荐
知识点3:解决方案 要解决连接空闲8小时自动断开的问题,可以使用连接池机制来管理数据库连接。常用的连接池机制有 C3P0、Proxool、DBCP 等。在本例中,可以使用 C3P0 连接池机制来解决问题。 知识点4:C3P0 连接...
本文主要讲述了在MySQL数据库服务器下使用C3P0连接池的配置,解决了连接池的问题,并提供了详细的解决方案。 一、概述 在开发项目时,笔者遇到了一些问题,即Tomcat服务器与MySQL数据库之间使用第三方C3PO连接池,...
MySQL+Hibernate 连接空闲8小时自动断开问题解决方案 知识点1: Hibernate 的连接池机制 在 Hibernate 中,默认情况下 使用的是 DriverManagerConnectionProvider,这是一个简单的连接池机制。它将打开的连接缓存在...
2. **设置连接池的连接存活时间小于 `wait_timeout`**:在 c3p0 连接池的配置中,可以设置 `maxIdleTime` 参数,使其小于 MySQL 的超时时间,这样连接池会更早地回收和关闭连接,避免因 MySQL 自动断开连接导致的...
阅读并理解这个纯Java实现的连接池源码,可以帮助我们深入理解数据库连接池的工作原理,为今后优化和定制自己的连接池解决方案打下坚实的基础。 总的来说,这个项目提供了一个学习和研究数据库连接池实现的绝佳...
该异常通常意味着与MySQL服务器的通信出现问题,例如网络中断、服务器端主动断开连接等。 #### 异常详情 本次异常的具体描述为:“Communications link failure due to underlying exception: **BEGINNESTED ...
三、常见连接问题及解决方案 1. **连接超时**:检查网络是否通畅,服务器是否正常运行,以及`wait_timeout`配置是否过短,适当延长等待时间。 2. **权限问题**:确认用户名和密码正确,并检查用户是否有足够的权限...
在描述中提到的解决方案是通过调整MySQL的配置来解决8小时空闲后连接超时的问题。有两种方法: 1. 修改启动参数: 在启动MySQL服务时,可以添加`--interactive_timeout=288000`参数,将交互式连接的超时时间设置为...
5. **性能优化**:通过使用连接池如C3P0或HikariCP,可以有效地管理数据库连接,提高应用性能。 6. **SSL加密**:Connector/J支持SSL连接,以确保数据在传输过程中的安全性。 7. **多语句执行**:支持在一个数据库...
本文将详细介绍如何解决MySQL权限不足的问题,并提供具体的解决方案。 #### 一、理解MySQL权限系统 在深入探讨解决方法之前,首先需要了解MySQL的权限管理系统。MySQL使用基于角色的访问控制(RBAC)机制,通过定义...
### MySQL占用率达到99%:问题分析与解决方案 #### 一、问题背景 在服务器运维过程中,遇到MySQL数据库服务占用率高达99%的情况时,这通常意味着数据库服务正在面临严重的问题,可能导致整个系统的响应时间增加,...
在JavaEE应用中,MySQL数据库是常见的数据存储解决方案。然而,为了优化资源使用,MySQL配置了一个参数`wait_timeout`,这个参数定义了连接在空闲多长时间后会被自动关闭。当JavaEE应用中的数据库连接在超过这个设定...
当应用程序遇到这种问题时,一种常见的解决方案是在数据库连接字符串中添加"autoReconnect=true"选项,试图在断开连接后自动重新连接。然而,对于MySQL 4.0之前的版本,这种方法可能有效,但在较新的MySQL版本中,...
Linux环境下的MySQL数据库提供了高效、稳定的数据存储和管理解决方案。本文将深入探讨如何在Linux上安装、配置MySQL,以及进行基本的数据库操作,如增、删、查、改。 一、MySQL在Linux上的安装 在Linux系统中,...
4. **超时设置**:检查MySQL的`wait_timeout`和`interactive_timeout`配置,这两个参数控制了客户端无活动后断开连接的时间,如果设置得过短,也可能导致连接错误。 5. **服务器资源限制**:如果服务器资源紧张,如...
- **MySQL 8小时问题**:MySQL默认设置下,连接空闲8小时后会被自动断开,但DBCP连接池无法感知这一变化。 - **网络故障后的连接失效**:如遇到网络中断或数据库重启的情况,即使等待一段时间后,DBCP中的连接可能仍...
3. **优化应用程序**:确保你的应用程序正确管理数据库连接,使用连接池(如Java的C3P0、DBCP,Python的DBUtils等)来复用连接,减少新连接的创建。 4. **监控和限制**:安装和配置MySQL监控工具,如MySQL ...
此外,还可以考虑其他高性能的数据源解决方案,例如 HikariCP 等。 #### 四、总结 Spring JDBC 不仅简化了对 JDBC 的使用,还通过集成 Apache DBCP 和 C3P0 两种数据源实现提供了丰富的配置选项。开发人员可以根据...
3. **C3P0连接池配置**:如果你使用C3P0作为数据库连接池,可以通过以下配置启用连接测试和自动重连: ```xml <property name="hibernate.c3p0.acquire_increment">1 <property name="hibernate.c3p0.idle_test_...