博主在做web开发时遇到MySql数据库连接超时的问题。

控制台报错如下:

Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 1 ms ago.

由于用到了spring+mybatis的框架,刚开始以为是mybatis引起的,后来才发现是MySql数据库连接超时。

这个异常是由于MySQL服务再长时间不连接之后断开了,断开之后的首次请求会抛出异常。那么既然是超时问题,就要去探究一下Mysql连接时间是怎么控制的。打开Mysql的控制台,运行:show variables like '%timeout%'; ,查看和连接时间有关的Mysql系统变量,如图:

其中wait_timeout就是负责超时控制的遍历,其时间为长度28800s,就是8个小时,那么就是说Mysql的服务会在操作间隔8小时后断开,需要再次重连。

interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。

wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。

Mysql的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。Linux系统下的配置文件为/etc/my.cnf,windows下在[MySQL_HOME]/bin下的mysql.ini。

修改之后保存退出,重启mysql服务。

如果不修改mysql的配置,需要直接在spring-mybatis的配置文件中实现,可以采用以下的方式:

  <bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName"   value="${mysql_driver}"/><property name="url"       value="${mysql_url}"/><property name="username"     value="${mysql_username}"/><property name="password"    value="${mysql_password}"/><property name="validationQuery"     value="SELECT 1"/><property name="testOnBorrow"         value="true"/></bean>

如上面代码所示,dirverClassName,url,username,password是数据库的连接配置,都很常见。关键是validationQuery和testOnBorrow两个参数。Spring建议使用的数据源有Apache的DBCP和C3P0,这里使用的是DBCP,前面四个参数是基本参数,而后面两个参数是连接健康情况的参数,如下图所示:

添加了validationQuery和testOnBorrow两个参数可以保证在mysql服务长时间不连接断开之后的请求不会出现异常情况,当然也可以在配置文件中将testOnReturn等之类的配置加上。

MySql数据库连接超时处理相关推荐

  1. 解决mysql数据库连接超时问题

    前段时间部署在服务器上的网站遇到一个问题:当较长时间没有去访问网站,再次打开时就会报一个数据库连接失败的错误,不管是用ssh开发的项目还是ssm开发的项目,都有这个问题.本篇博客记录这个问题的原因与解 ...

  2. MySQL数据库连接超时(wait_timeout)问题的处理

    想必大家在用MySQL时都会遇到连接超时的问题,如下图所示:        就是这个异常(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException ...

  3. mysql 数据库连接超时时间查询、修改

    查询连接超时时间 SHOW [GLOBAL] VARIABLES LIKE '%timeout%'; 查询所有带 timeout 的变量. 带[GLOBAL] 参数时,查询全局变量,不带[GLOBAL ...

  4. 添加MySql数据库超时设置的相关问题

    最近在工作中, 遇到MySql数据库连接超时的问题,申同事帮忙解决了一下,看到原来的MySqlHelper里面没有封装相关的超时方法,就添加了一个,我在这里记录了一下,希望对像我一样入门级的程序员有所 ...

  5. mysql与oracle链接超时_数据库连接超时问题(求解)

    问题出现的背景: APP框架,生产者和消费者模式,数据源配置包括mysql(mysql的分支maria DB)的数据源和oracle. 问题描述: 初始化时注册c3p0没有问题,在第一次使用数据库连接 ...

  6. MySQL连接问题【如何解决MySQL连接超时关闭】

    --MySQL连接问题[如何解决MySQL连接超时关闭] ------------------------------------------------转载 最近做网站有一个站要用到WEB网页采集器 ...

  7. mysql数据库连接过多的错误,可能的原因分析及解决办法

    mysql数据库连接过多的错误,可能的原因分析及解决办法 来源:网络采集 作者:未知 系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是 ...

  8. mysql 设置连接超时_如何配置MySQL数据库超时设置

    最近备战京东双11,在配置MySQL的超时配置发现有很多地方可以设置.这么多超时的配置有什么影响,以及配置会有什么影响呢?今天的文章就让我来大家来分析一下. 1. JDBC超时设置 connectTi ...

  9. MySql连接超时引起的生产故障

    吃饭期间,忽然收到线上告警,排查原因发现是数据库连接超时. 于是联系DBA,一番排查下来数据库的Master节点的宿主机出现了故障. 主从切换后,告警还没回复,业务不可用,继续看链路跟踪日志. 找链路 ...

最新文章

  1. 谷歌最新开源BundleTrack: 无需任何CAD模型的6D物体姿态跟踪算法
  2. 如何看懂照片的直方图
  3. Cissp-【第4章 通信与网络安全】-2021-3-12(377页-392页)
  4. httpd反代 + tomcat cluster + redis会话保持
  5. chrome 获取剪贴板内容_Chrome 开发者工具的11 个高级使用技巧
  6. Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题
  7. tensorflow2 tensorboard可视化使用
  8. Linux MTD子系统 _从模型分析到Flash驱动模板
  9. 针对视觉位姿估计特征点优化问题的详细研究
  10. 3 编程基础 Makefile
  11. JavaScript : 基本的处理事件
  12. 数据特征分析方法总结
  13. 地图开发中用到的比例尺和分辨率
  14. 车架号校验 php代码,VIN车辆识别代码查询(精准版)
  15. 100 位测试工程师的 2018 年度关键词与 2019 展望
  16. 蓝凌OA前台任意文件读取漏洞利用
  17. 调用微信二维码识别开源库
  18. SLIC 简单线性迭代聚类
  19. 小小甜菜深度学习爬坑记
  20. 硬件知识:电源开关上的“1“和“0“分别是什么意思

热门文章

  1. 聊聊kafka client chunkQueue 与 MaxLag值
  2. malloc()与calloc区别【转】
  3. 从一道常见习题的自然延伸谈起
  4. StructureMap 代码分析之Widget 之Registry 分析 (1)
  5. c#泛型的使用[转]
  6. ubuntu 终端常用命令
  7. 理财心理陷阱之:年终奖——年末的虚假繁荣
  8. 【JS基础】Array数组的创建与操作方法
  9. RabbitMQ学习笔记-安装
  10. RAID磁盘阵列——扫盲篇