项目中使用了springboot2.1.4作为框架,数据库链接池选用了号称非常快的也是springboot默认支持的HikariCP作为连接池。引入springboot完全支持,所以不需要引入额外的jar,配置文件如下:

spring:
  application:
    name: framework-manage
  profiles:
    active: dev
  #数据库连接
  datasource:
    url: jdbc:mysql://localhost:3306/rz_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
    username: root
    password: root
    #连接池
    hikari:
      minimum-idle: 5
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 30000
      pool-name: DatebookHikariCP
      max-lifetime: 120000
      connection-timeout: 30000
      connection-test-query: SELECT 1

在刚开始配置时候,将max-lifetime设置为1800000(网上很多博客设置均为这个),隔上一段时间不连接,就会出现以下警告,需要等待四五个这种警告后,才能请求回数据。

DatebookHikariCP - Failed to validate connection
com.mysql.cj.jdbc.ConnectionImpl@23338be2 (No operations allowed after connection closed.)
. Possibly consider using a shorter maxLifetime value.

修改过数据库的相关配置,还是不行,后来翻译了下这段话,发现是说可能考虑使用较短的maxLifetime值,这个值最小是30000,于是将其修改为30000后,又出现了下面这个警告:

DatebookHikariCP - idleTimeout is close to or more than maxLifetime, disabling it.

这个只是在启动时候出现,并不影响操作,后来查询发现,设置idleTimeout 时候有一个规则,即如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒。于是将max-lifetime设置为了120000,这个问题不在出现。

HikariCP常用的参数配置:

1.autoCommit

自动提交从池中返回的连接,默认为true。

2.connectionTimeout

等待来自池的连接的最大毫秒数,默认为30000,如果小于250毫秒,则被重置回30秒。

3.idleTimeout

连接允许在池中闲置的最长时间,默认为600000,即10分钟。如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒。只有当minimumIdle小于maximumPoolSize时,这个参数才生效,当空闲连接数超过minimumIdle,而且空闲时间超过idleTimeout,则会被移除。

4.maxLifetime

池中连接最长生命周期。默认为1800000,如果不等于0且小于30秒则会被重置回30分钟。

5.minimumIdle

控制连接池空闲连接的最小数量,当连接池空闲连接少于minimumIdle,而且总共连接数不大于maximumPoolSize时,HikariCP会尽力补充新的连接。为了性能考虑,不建议设置此值,而是让HikariCP把连接池当做固定大小的处理,默认minimumIdle与maximumPoolSize一样。当minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize,该值默认为10。

6.maximumPoolSize

池中最大连接数,包括闲置和使用中的连接。默认为10。如果maxPoolSize小于1,则会被重置。当minIdle<=0被重置为DEFAULT_POOL_SIZE则为10;如果minIdle>0则重置为minIdle的值。

7.poolName

连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置。默认为HikariPool-1。

8.readOnly

从池中获取的连接是否默认处于只读模式。默认为false。

9.connection-test-query

如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性。这是针对不支持JDBC4的“传统”驱动程序Connection.isValid() API。这是在连接从池中获得连接以确认与数据库的连接仍然存在之前将要执行的查询。再一次,尝试运行没有此属性的池,如果您的驱动程序不符合JDBC4的要求,HikariCP将记录一个错误以告知您。 默认值:无