经过研究一段时间之后,发现配置文件中的两个配置要注意。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项目谁会没事只开一个连接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)