Springboot连接池的配置和遇到的问题

Springboot连接池的配置

前言:最近发现项目日志中经常会出现有关数据源的一些警告信息,说实话看着这种日志就很闹心,而且对于数据源这么重要的东西还是有必要去着重解决,学习的。
在这里插入图片描述
可以看出,有两个关于数据源的异常信息:

1.在连接关闭之后不允许被再操作。

2.抛出异常说连接是不可用的,请求时间超过了30000ms;

其实看到这个情况就知道肯定跟数据源连接池的配置信息有关,

name描述默认值
autoCommit自动提交从池中返回的连接true
connectionTimeout等待来自池的连接的最大毫秒数30000ms
idleTimeout连接允许在池中闲置的最长时间600000ms
readOnly从池中获取的连接是否默认处于只读模式false
maximumPoolSize池中最大连接数,包括闲置和使用中的连接10
minimumIdle池中维护的最小空闲连接数10
maxLifetime池中连接的最长生命周期1800000

其实常用的就这些吧,可以根据日志输出的问题来看看需要配置那些值;

问题1:应该就是在我们使用完连接后,连接已经失效了但是没有被回收,因为MySQL针对长时间的DB连接在无任何操作情况下过了8个小时后会自动把这个连接关闭(mysql默认的wait_timeout为8小时),在连接池中的connection如果空闲超过8小时,mysql会将其断开,但是连接池并不知道connection已经失效,如果这时有client请求connection,连接池将失效的connection给client,就会造成该异常。

解决:配置相应的连接池参数(最主要的应该是参数idleTimeout,maxLifetime),定时去检查连接的有效性,定时清理无效的连接。

并且我在有些文章上看到这样段话 ‘to set maxLifeTime value few minute less than mysql’s wait_timeout(show variables like “%timeout%”) to avoid broken connection exception.’ 将maxLifetime值设置为比MySQL的wait_time小一些。查看mysql数据库的wait_time命令 show variables like “%timeout%”

问题2:请求数据库连接时,长时间未获取到而报错。

解决:通过配置connectionTimeout值来控制等待获取连接的时间

为了让自己更明白一点,翻了下以前做的笔记:

在这里插入图片描述

这个可以直接在网上查看一些连接池的基本工作原理,至于连接池的创建和实现方式,使用连接池的好处,常见的连接池 等都有的,就不介绍了。下来可以看一下这两篇文章:https://www.cnblogs.com/devin-ou/p/7989701.html
https://blog.csdn.net/u010028461/article/details/78932109

关于上面遇到的问题和连接池全部的配置,也推荐看:https://blog.csdn.net/wantLight/article/details/107163468 https://blog.csdn.net/mezheng/article/details/111993947

总结:

对于连接池的工作原理和好处这些都没有写,但是还是要花时间再去看看,估计这样才能真的明白如何去配置我们的连接池。贴出来的链接其实上班的路上看看最适合不过了,还有最近不知道为什么总是没心思去写博客,其实真的静下心来开始写了,又感觉挺不错的。加油!!!

下一篇文章:常见的加密解密算法使用


版权声明:本文为weixin_43573186原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。