最近服务器连接数据库总是超时,查看报错日志显示
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 60001ms.
所以怀疑是数据库连接数不够的问题.而导致数据库连接数不够,原因有很多,总结了一下,大致有两方面配置问题:1.Hikari配置问题 2.Mysql数据库配置问题
一.Hikari配置问题
1.修改过后Hikari配置文件
"connectionTestQuery": "SELECT 1",
"connectionTimeout": 30000,
"idleTimeout": 60000,
"maxLifetime": 120000,
"maximumPoolSize": 10,
"minimumIdle": 10
2.HikariCP 默认配置
3.我的Hikari之前的配置问题是 idleTimeout+1秒>maxLifetime 会导致idleTimeout=0
idleTimeout
默认是600000毫秒,即10分钟。如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0;如果idleTimeout!=0且小于10秒,则会被重置为10秒。如果idleTimeout=0则表示空闲的连接在连接池中永远不被移除。
只有当minimumIdle小于maximumPoolSize时,这个参数才生效,当空闲连接数超过minimumIdle,而且空闲时间超过idleTimeout,则会被移除。
minimumIdle
控制连接池空闲连接的最小数量,当连接池空闲连接少于minimumIdle,而且总共连接数不大于maximumPoolSize时,HikariCP会尽力补充新的连接。为了性能考虑,不建议设置此值,而是让HikariCP把连接池当做固定大小的处理,默认minimumIdle与maximumPoolSize一样。
当minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize,该值默认为10。
maxLifetime
用来设置一个connection在连接池中的存活时间,默认是1800000,即30分钟。如果设置为0,表示存活时间无限大。如果不等于0且小于30秒则会被重置回30分钟。
小结:Hikari配置问题,要参照官方文档,及你代码里面的Hikari版本,以及服务器配置来综合考虑配置.(Hikari版本很老的话maxlifetime的默认值是不一样的)
解决:不能算是解决吧,服务器中的Hikari配置文件按照上述的修改了,暂时没什么问题,待时间来检验是否设置合理.mysql数据库配置,在网上找了很多资料,有的说默认值好,不用修改.有的配置值修改的很大. 所以就没有修改,还是保持默认值,没办法,不是专业的DBA,只能是出了问题,一点点解决吧.