最近服务器连接数据库总是超时,查看报错日志显示

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 默认配置

java数据库连接异常 java 数据库连接超时_java数据库连接异常

java数据库连接异常 java 数据库连接超时_连接池_02

 

java数据库连接异常 java 数据库连接超时_重置_03

    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,只能是出了问题,一点点解决吧.

二.Mysql数据库配置问题