连接数据库超时设置autoReconnect=true

当数据库连接闲置超过特定时间(如8小时),MySQL会自动断开连接。为避免此问题,可以设置JDBC连接URL参数`autoReconnect=true`。对于Hibernate,还需配置相关属性。此外,解释了MySQL JDBC URL的重要参数,包括`autoReconnect`和`failOverReadOnly`,并提供了XML配置文件中的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,问题现象:

com.MySQL.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds 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.

解决办法:
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.
    不用hibernate的话, connection url加参数: autoReconnect=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>

以上转载链接地址:http://blog.aqsc.cn/article.php?type=blog&itemid=1016

2,另外:关于Mysql链接参数的说明如下:

mysql JDBC Driver
常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Driver
详情请参见网站:http://www.gjt.org/
或在本网站下载mysql JDBC Driver(mm.jar)
另一个是mysql官方提供的JDBC Driver,其JAVA类名为:com.mysql.jdbc.Driver
驱动下载网址:http://dev.mysql.com/downloads/,进入其中的MySQL Connector/J区域下载。
mysql JDBC URL格式如下:
jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...
现只列举几个重要的参数,如下表所示:

<table border="0" cellspacing="1" cellpadding="4" width="96%" bgcolor="#b6cae1" align="center" style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px"> <tbody> <tr bgcolor="#cedee7"> <td width="85" align="middle">参数名称</td> <td width="200" align="middle">参数说明</td> <td width="50" align="middle">缺省值</td> <td width="80" align="middle">最低版本要求</td> </tr> <tr bgcolor="#ffffff"> <td>user</td> <td>数据库用户名(用于连接数据库)</td> <td>&nbsp;</td> <td>所有版本</td> </tr> <tr bgcolor="#ffffff"> <td>password</td> <td>用户密码(用于连接数据库)</td> <td>&nbsp;</td> <td>所有版本</td> </tr> <tr bgcolor="#ffffff"> <td>useUnicode</td> <td>是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true</td> <td>false</td> <td>1.1g</td> </tr> <tr bgcolor="#ffffff"> <td>characterEncoding</td> <td>当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk</td> <td>false</td> <td>1.1g</td> </tr> <tr bgcolor="#ffffff"> <td>autoReconnect</td> <td>当数据库连接异常中断时,是否自动重新连接?</td> <td>false</td> <td>1.1</td> </tr> <tr bgcolor="#ffffff"> <td>autoReconnectForPools</td> <td>是否使用针对数据库连接池的重连策略</td> <td>false</td> <td>3.1.3</td> </tr> <tr bgcolor="#ffffff"> <td>failOverReadOnly</td> <td>自动重连成功后,连接是否设置为只读?</td> <td>true</td> <td>3.0.12</td> </tr> <tr bgcolor="#ffffff"> <td>maxReconnects</td> <td>autoReconnect设置为true时,重试连接的次数</td> <td>3</td> <td>1.1</td> </tr> <tr bgcolor="#ffffff"> <td>initialTimeout</td> <td>autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒</td> <td>2</td> <td>1.1</td> </tr> <tr bgcolor="#ffffff"> <td>connectTimeout</td> <td>和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本</td> <td>0</td> <td>3.0.1</td> </tr> <tr bgcolor="#ffffff"> <td>socketTimeout</td> <td>socket操作(读写)超时,单位:毫秒。 0表示永不超时</td> <td>0</td> <td>3.0.1</td> </tr> </tbody> </table>

 

对应中文环境,通常mysql连接URL可以设置为:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false
在使用数据库连接池的情况下,最好设置如下两个参数:
autoReconnect=true&failOverReadOnly=false
需要注意的是,在xml配置文件中,url中的&符号需要转义成&。比如在tomcat的server.xml中配置数据库连接池时,mysql jdbc url样例如下:
jdbc:mysql://localhost:3306/test?user=root&amp;password=&amp;useUnicode=true&amp;characterEncoding=gbk
&amp;autoReconnect=true&amp;failOverReadOnly=false

 

转载于:https://my.oschina.net/zhangmaoyuan/blog/1606273

Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@197f0880] was not registered for synchronization because synchronization is not active 2025-06-05 10:12:17.312 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42435 2025-06-05 10:12:17.313 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42443 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42445 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42451 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42453 2025-06-05 10:12:17.316 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42461 2025-06-05 10:12:17.316 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42462 2025-06-05 10:12:17.317 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42465 2025-06-05 10:12:17.320 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42470 2025-06-05 10:12:17.321 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42475 JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@59f7e6a3] will not be managed by Spring ==> Preparing: SELECT id,username,phone,license_plate,user_password,yn,create_time,update_time FROM tb_user WHERE (phone = ?) ==> Parameters: 18555522072(String) <== Columns: id, username, phone, license_plate, user_password, yn, create_time, update_time <== Row: 2, 李华, 18555522072, 1234, 1234, null, 2025-04-16 09:49:06, 2025-04-17 11:00:37 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@197f0880] 2025-06-05 10:12:17.461 INFO 24008 --- [nio-8080-exec-6] c.z.c.demo.aspect.OpenApiCatchAspect : 接口请求方法=AuthController login, 请求参数=[{"password":"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4","phone":"18555522072"}], 返回={"success":true}, 用时=238ms Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c0ea46] was not registered for synchronization because synchronization is not active JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@59f7e6a3] will not be managed by Spring ==> Preparing: SELECT id,username,phone,license_plate,user_password,yn,create_time,update_time FROM tb_user WHERE (phone = ?) ==> Parameters: 18555522072(String) <== Columns: id, username, phone, license_plate, user_password, yn, create_time, update_time <== Row: 2, 李华, 18555522072, 1234, 1234, null, 2025-04-16 09:49:06, 2025-04-17 11:00:37 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c0ea46] 2025-06-05 10:12:18.087 INFO 24008 --- [nio-8080-exec-7] c.z.c.demo.aspect.OpenApiCatchAspect : 接口请求方法=AuthController login, 请求参数=[{"password":"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4","phone":"18555522072"}], 返回={"success":true}, 用时=0ms
最新发布
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值