自己的小网站在测试机器上长时间不访问后(默认8小时过期),再次访问发现有如下错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received fro
m the server was 63,020,509 milliseconds ago. The last packet sent successfully to the server was 63,020,509
milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either e
xpiring and/or testing connection validity before use in your application, increasing the server configured v
alues for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this pr
oblem.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:4
5)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3851)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2471)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
Fix: If only the connection pool could check if the the connection it is about to return is live or not, the porblem is fixed. This can be done in apache-common-dbcp (I know this one coz I used it, please look into documentation of the connection-pool you are using). Here’s how you do it: You add the following properties to dbcp configuration.
- validationQuery=”SELECT 1″
- testOnBorrow=”true”
And that does the trick.
暂时我对我的mysql连接加上: 试试效果
validationQuery
=
"SELECT 1"
testOnBorrow
=
"true"
目前我不想添加: autoReconnect=true 因为我对此的理解不深,mysql文档这样写的:
This parameter is false
by default. This forces disconnected API nodes (including MySQL Servers acting as SQL nodes) to use a new connection to the cluster rather than attempting to re-use an existing one, as re-use of connections can cause problems when using dynamically-allocated node IDs. (Bug #45921)
如果有问题再添加 autoReconnect选项
like this:
<Resource name="jdbc/saasNetTest" auth="Container" type="javax.sql.DataSource"
initialSize="10" maxActive="100" maxIdle="30" maxWait="10000"
username="***" password="***" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/saasNetTest"
validationQuery="SELECT 1"
testOnBorrow="true"
/>
参考文档:http://stackoverflow.com/questions/9674165/mysql-jdbc-timeout-even-with-autoreconnect-true
http://amitcodes.com/2008/07/26/16/
http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency
相关推荐
MySQL 连接超时问题是常见的错误之一,解决该问题需要了解 wait_timeout 参数的重要性,并正确地使用 show variables 命令。同时,在使用 Hibernate 框架进行数据库操作时,需要注意连接超时问题,并采取相应的解决...
提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。
【MySQL连接错误分析与解决】 在使用MySQL数据库时,可能会遇到“Authentication Failed”错误,这通常意味着客户端在尝试连接数据库时认证失败。错误信息显示“Reading from the stream has failed”,表明在数据...
MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...
MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...
错误2002通常是因为客户端尝试连接的端口与MySQL服务器实际监听的端口不符。解决方法包括: - **咨询空间提供商**:获取正确的端口号并更新客户端配置。 #### 2003 错误:MySQL服务没有启动 错误2003表示MySQL服务...
开始受到“Communications link failure”和“连接超时”等信息的误导,一直将问题定位在“MySQL 连接超时时间”Timeout 参数上,该参数默认为 8 小时,并且一直认为问题就出在 “MySQL”上,甚至于要大动干戈的将 ...
本文将详细介绍MySQL中常见的错误代码及其中文含义,这将帮助DBA快速理解和解决数据库中出现的问题。 首先,错误代码1005表示创建表失败。这可能是由于表的定义有误,比如字段类型不匹配,或者引用的外键不存在。 ...
### MySQL 错误日志详解 #### 一、概述 MySQL作为一款广泛使用的数据库管理系统,在实际操作中难免会遇到各种各样的错误。了解并掌握这些错误的含义及其解决方法对于数据库管理员来说至关重要。本文将详细介绍...
本示例提供了使用VB连接MySQL数据库的具体方法,并包含了相关的控件,使得开发者能够直观地进行数据操作。下面我们将详细讲解如何在VB中集成MySQL数据库,以及如何使用控件进行数据交互。 首先,为了在VB中与MySQL...
### MySQL 错误代码及含义详解 在使用MySQL数据库的过程中,可能会遇到各种错误代码,这些错误代码可以帮助我们快速定位问题所在,并采取相应的措施解决问题。本文将详细介绍一系列MySQL错误代码及其对应的含义,...
MySQL数据库连接池是提高应用程序性能的一种重要技术,它允许开发者管理多个数据库连接并高效地复用这些连接,而不是每次需要时都创建新的连接。在C#编程中,我们可以使用自定义的连接池或者第三方库如ADO.NET的...
本资源包含了一个可编译运行的C++ MySQL连接池示例,这对于理解和实践C++中的数据库管理是非常有价值的。 首先,连接池的概念是这样的:它是一组预先初始化的数据库连接,程序在需要时可以从池中获取一个已存在的...
### MySQL错误码大全知识点解析 #### 一、概述 MySQL是一种广泛使用的开源关系数据库管理系统,其在实际应用过程中可能会遇到各种各样的问题。为帮助开发者和数据库管理员更好地理解和解决这些问题,MySQL提供了...
此外,根据实际情况,你可能还需要处理异常、连接超时和其他错误情况。 在"mysqlTest"的实践中,你可能需要根据你的数据库配置和表结构调整上述代码。通过这种方式,你可以在C++中实现对MySQL数据库的连接和查询,...
`SqlHelper`类可能是一个通用的SQL操作助手类,而`ConnPool`类则可能是实现MySQL连接池的类。 `SqlHelper`类可能包含以下功能: 1. 提供SQL语句执行的方法,如执行查询、更新、插入等操作。 2. 包含事务管理功能,...