java mysql 连接超时_Java Mysql连接池配置和案例分析--超时异常和处理

本文探讨了Java应用使用MySQL时遇到的连接超时问题,分析了问题本质,即MySQL服务器关闭空闲连接后,客户端未主动关闭导致的异常。文章介绍了两种解决方案:设置重连选项(`autoReconnect=true`)和连接池主动淘汰策略,包括`testBeforeUse/testAfterUse`、定时任务配合空闲阈值淘汰以及结合`validationQuery`的检测淘汰。同时,以DBCP连接池为例展示了相关配置,并强调了配置`validationQuery`、`testOnBorrow`等参数的重要性。
摘要由CSDN通过智能技术生成

前言:

最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测机制, 导致sql执行失败.

问题的表层根源, 看似简单, 但实际解决之路, 却显得有些曲折坎坷. 因此有必须分析下本质的原因, 以及Java Mysql连接池的处理策略和相关的配置项.

异常现象和问题本源:

服务的持久层依赖mysql, 采用连接池的机制来优化性能. 但服务空闲一段时间(切确地讲是mysql connection空闲一段时间), 下次使用时执行sql失败.

具体的异常, 可反映到具体的异常日志:

fec69e942164f496c9f22f1ffb06d559.png

当然除了异常的原因以外, 里面也提供了一个解决方案.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:

The last packet successfully received from the server was 47,302,202 milliseconds ago.

The last packet sent successfully to the server was 47,302,202 milliseconds ago.

is longer than the server configured value of 'wait_timeout'.

You should consider either expiring and/or testing connection validity before

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值