SpringBoot整合Mybatis-Plus报错

问题现象

使用SpringBoot整合Mybatis-Plus多数据源使用多线程执行mysql数据库新增和更新操作时,出现如下报错:
报错类似如下:

具体如图:
SQLTransientConnectionException: Connection is not available, request timed out after 10014ms

报错原因

Mybatis-Plus默认使用的是 HikariPool数据库连接池,解释下报错原因就是没有可用数据库连接,获取连接等待超时,我这里是10s中超时(很奇怪,配置的明明是30s),看下在apollo中的部分相关配置(如果没用apollo,应该在application.yml文件中):
apollo中的部分数据源配置
这里设置的connection-timeout超时时间是50s,而Mybatis-Plus中的HikariCpConfig类中默认的是30s,这里应该以我们配置的为准,奇怪的就是为什么我这10s就报超时了,还没搞明白!

处理过程

可能原因一:

第一反应应该是配置数据库的连接池数量超过上限,或者哪里的连接没有释放,但是发现通过doDBA监测Mysql发现连接数量没有超上限,是正常的:
doDBA监测Mysql连接池数量
如果你的存在手工创建session,使用完后没关闭的,需要在finally中调用session.close()关闭即可。我这里应该不是这个原因

可能原因二:

第二个原因可能就是数据源connection-timeout的超时时长和max-pool-size的的配置问题,可以加大时长,增多连接数量。但我这还是不是这个原因。

可能原因三:

这时候我发现在我们使用了多个数据源,在apollo中有多个数据源配置,这个数据源的配置信息这部分没起作用,而是使用了主库的相关配置,导致这里的连接超时时间变为了主库数据源的配置时间,也就是10s,那么问题就找到了,然后修改了主库相关的配置信息,发现连接数量立马就上来了,自然也就不再报错了:
SpringBoot整合Mybatis-Plus报错

总结

所以SQLTransientConnectionException: Connection is not available, request timed out after 10014ms问题报错的原因还是上面说的原因,但是造成这个原因的可能性又有很多,得根据自己的实际情况去排查并解决问题。


版权声明:本站所有文章,如无特殊说明,均为本站原创。转载请务必注明文章来源,谢谢支持。
本文链接:https://www.panziye.com/java/4676.html
本文《SpringBoot整合Mybatis-Plus报错》由网赚联盟( wangzhuan.org.cn )整理或原创,感谢您的阅读。

随机文章

SEO教程
站长导航
搜素引擎算法
关键词排名优化
网站内容优化
GEO培训
SEO教程
友情链接交换

百度搜索“网赚联盟”即可找到本站,微信搜索“小小课堂网”关注小小课堂网公众号。网赚联盟( wangzhuan.org.cn )欢迎用户投稿,发布者:用户投稿,文章版权归作者所有,投稿文章不代表网赚联盟立场,中二少年发布为网赚联盟原创文章,转载请注明出处:https://wangzhuan.org.cn/238212.html