记一次Springboot集成druid系统间歇性报communications link failure

记一次Springboot集成druid系统间歇性报communications link failure,第1张

springBoot项目集成druid的时候,系统间歇性的报CommunicationsException:communications link failure的异常如下。由于是间歇性的,即并不是每次都报异常,而是过了一段时间之后就会出现,所以针对性的测试修复难度很大。

经过研究一段时间之后,发现配置文件中的两个配置要注意。test-while-idle 和 time-between-eviction-runs-millis,具体配置的说明如下。

如果想在开发环境复现这种问题的话,

首先设置mysql变量

set global interactive_timeout=30

set global wait_timeout=30 (超时时间由28800改为30秒)

然后再把项目druid的配置文件test-while-idle=false

最后启动项目,第一次请求sql才会初始化连接池,等待30+秒,再次请求sql就会出现以上错误(CommunicationsException异常也不是只有一种情况,这里解决的是java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

Java单体项目里,我们一般是只需配置一个数据库,这时代码里的dao层都是只对一个数据库 *** 作;但有时候我们的数据可能在2个或者3个数据库,这时就需要配置更多数据源,进行数据库直连 *** 作,下面以MySQL的两个库为例(Oracle也就换个驱动类与连接串)。

(本文阅读大概花费两分钟)

技术条件:

springboot 2.5.3 (即springframework 5.3.9)

MySQL 5.7

mybatis-plus 3.5.0

dynamic-datasource 3.5.0

druid 1.2.9

idea开发工具、maven 3.3.9

1、导入相关依赖

2、建立两个数据库mydb(表 user)、db2(表t_class),并分别建一张表

3、编写application.yaml配置文件

4、编写po类、dao层、一个接口测试类

其中,在dao的类加上对应的数据源标识符,使用此注解com.baomidou.dynamic.datasource.annotation.DS

5、启动项目,查看结果

至此,多数据源环境集成成功;当然这里只使用了查询功能,对应事务相关的下一回合文章再做讨论啥。

维护一个toB智能制造项目的时候,发现mysql偶尔会报错:

这个错误发生时,重新调用接口即可重新连接上,倒是没有特别大的阻碍,但是偶尔跳出还是烦人。所以我花了点时间研究了下。

这个问题很明显,就是mysql连接断了。

网上查到的解决方案无非以下几种:

试过了,但是后来发现,这个参数仅针对mysql4.x有效果,现如今的mysql稳定版大多是5.7,还有很多同行直接使用mysql8.x,所以这个方法没有效果。

这个都不用试,标准的spring项目谁会没事只开一个连接

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8511708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存