Struts Problem Report
Struts has detected an unhandled exception:
Messages:
Software caused connection abort: socket write error
The last packet successfully received from the server was58974 milliseconds ago.The last packet sent successfully to the server was 58974 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
could not execute query
could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query
File: org/hibernate/exception/SQLStateConverter.java
查了一下,原来是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.
解决办法:
一种. 如果不用hibernate的话, 则在 connection url中加参数: autoReconnect=true
jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true
二种。用hibernate的话, 加如下属性:
<property name="connection.autoReconnect">true</property>
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
三。要是还用c3p0连接池:
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">0</property>
<property name="hibernate.c3p0.timeout">0</property>
<property name="hibernate.c3p0.validate">true</property>
四。最不好的解决方案
使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:
Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。
其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。
后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:
MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。
1. 按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true& failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。
2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重启生效,需要同时修改这两个参数。
相关推荐
总结来说,解决MySQL8小时空闲后连接超时问题的方法包括修改MySQL的启动参数或配置文件,以及优化应用程序的数据库连接管理,如使用连接池。同时,关注数据库性能优化,如使用合适的查询语句和数据类型,可以提升...
MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...
此文档主要是tomcat中MySQL连接池配置 - feng - BlogJava
在JavaEE应用中,MySQL数据库是...总之,处理JavaEE应用中的MySQL空闲关闭问题需要综合考虑数据库服务器的配置、连接池的管理策略以及应用本身的事务处理。正确配置和使用这些元素,可以确保应用的稳定性和资源效率。
MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...
可以根据应用需求调整连接池的参数,如最大连接数、空闲超时时间等。这些参数可以通过`UseMySql`方法中的`mySqlOptions`进行设置。 7. 性能优化 连接池可以减少创建和关闭连接的开销,提高系统性能。但过多的空闲...
idleTimeout 参数用于设置连接的空闲超时时间。在本例中,idleTimeout 参数设置为 1800,表示连接空闲 30 分钟后将断开。 知识点8:测试和部署 在解决连接空闲8小时自动断开的问题后,需要进行测试和部署。可以...
本篇文章将深入探讨MySQL的连接数据问题,旨在帮助用户理解和解决在数据库操作过程中遇到的连接问题。 一、MySQL连接方式 1. 命令行连接:通过终端或命令提示符输入`mysql -u username -p`,然后输入密码,可以直接...
MySQL数据库连接池是提高应用程序性能的一种重要技术,它允许开发者管理多个数据库连接并高效地复用这些连接,而不是每次需要时都创建新的连接。在C#编程中,我们可以使用自定义的连接池或者第三方库如ADO.NET的...
MySQL数据库连接参数是数据库操作中的重要组成部分,它们用于配置应用程序如何与MySQL服务器建立和管理连接。在Java开发中,常用的数据源配置类是`BasicDataSource`,它属于Apache Commons DBCP库,提供了数据库连接...
1. **连接池初始化**:在应用启动时,数据连接池会预先创建一定数量的数据库连接,这些连接被称为“空闲连接”并存储在池中,等待应用程序使用。 2. **连接获取与释放**:当应用需要访问数据库时,不再直接创建新的...
- **故障恢复**:监控连接状态,及时回收无效或超时连接。 - **优化数据库资源**:减少数据库服务器的压力,提高整体系统性能。 3. **Java实现连接池的基本架构** 一个简单的Java连接池实现通常包括以下几个核心...
连接池通常采用各种策略来优化资源使用,如最小连接数、最大连接数限制、超时回收、空闲连接检测等。这些策略旨在平衡资源利用率和系统负载。 10. **性能调优**: 调整连接池的参数,如设置合适的连接最小/最大...
总结,使用Proxool配置MySQL数据库连接池,不仅可以解决8小时连接超时问题,还可以提升应用程序的性能和稳定性。通过详细配置Proxool,我们可以灵活地调整连接池参数以适应不同应用场景的需求,并通过集成到Tomcat,...
在多线程环境中,MySQL连接数过多的问题是一个常见的性能瓶颈,尤其在高并发的应用场景下。这通常是由于每个线程创建一个独立的数据库连接导致的,当并发线程数量增加时,连接池中的连接数量也随之增加,如果超过...
# 基于C++和MySQL API的数据库连接池系统 ## 项目简介 本项目是一个基于C++和MySQL API的高性能数据库连接池系统。该系统旨在解决在高并发... 支持连接的超时管理和空闲连接的回收,优化资源利用。 3. 数据库操作
通常是由于MySQL服务器超时断开空闲连接所引起。通过适当调整MySQL服务器的`wait_timeout`配置或C3P0连接池的相关参数,可以有效地解决此类问题。在实际操作过程中,还需要根据具体的业务场景选择合适的配置方案,以...
连接池的大小、超时时间、最大空闲时间等参数需要根据实际应用的负载情况进行调整,以达到最佳性能和资源利用率。同时,合理的数据库设计和SQL优化也是提升整体性能的关键。 8. **安全性与维护**: 使用连接池时...
线程池和MySQL连接池是两种重要的资源管理技术,在多线程编程和数据库操作中扮演着关键角色。本文将详细探讨这两个概念,并结合在Ubuntu 12.04环境下使用C++实现线程池和MySQL连接池的方法。 线程池是一种优化并发...
当一个应用程序打开一个新的连接时,连接池会检查是否有可用的空闲连接,如果有,则直接返回,而无需进行实际的数据库连接操作。当连接不再使用时,它会被放回池中,而非立即关闭。这种方式显著减少了数据库的初始化...