配置项说明

  1. private static final char[] ID_CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
  2. private static final long CONNECTION_TIMEOUT = SECONDS.toMillis(30);
  3. private static final long VALIDATION_TIMEOUT = SECONDS.toMillis(5);
  4. private static final long IDLE_TIMEOUT = MINUTES.toMillis(10);
  5. private static final long MAX_LIFETIME = MINUTES.toMillis(30);
  6. private static final int DEFAULT_POOL_SIZE = 10;
  7. private static boolean unitTest = false;
  8. // Properties changeable at runtime through the HikariConfigMXBean
  9. //
  10. private volatile String catalog;
  11. private volatile long connectionTimeout;
  12. private volatile long validationTimeout;
  13. private volatile long idleTimeout;
  14. private volatile long leakDetectionThreshold;
  15. private volatile long maxLifetime;
  16. private volatile int maxPoolSize;
  17. private volatile int minIdle;
  18. private volatile String username;
  19. private volatile String password;
  20. // Properties NOT changeable at runtime
  21. //
  22. private long initializationFailTimeout;
  23. private String connectionInitSql;
  24. private String connectionTestQuery;
  25. private String dataSourceClassName;
  26. private String dataSourceJndiName;
  27. private String driverClassName;
  28. private String exceptionOverrideClassName;
  29. private String jdbcUrl;
  30. private String poolName;
  31. private String schema;
  32. private String transactionIsolationName;
  33. private boolean isAutoCommit;
  34. private boolean isReadOnly;
  35. private boolean isIsolateInternalQueries;
  36. private boolean isRegisterMbeans;
  37. private boolean isAllowPoolSuspension;
  38. private DataSource dataSource;
  39. private Properties dataSourceProperties;
  40. private ThreadFactory threadFactory;
  41. private ScheduledExecutorService scheduledExecutor;
  42. private MetricsTrackerFactory metricsTrackerFactory;
  43. private Object metricRegistry;
  44. private Object healthCheckRegistry;
  45. private Properties healthCheckProperties;
  46. private volatile boolean sealed;

HikariCP是Spring Framework 5.0的默认 数据库连接池,这得益于他的高性能。以下是该数据库连接池的重要参数:

  • maxPoolSize
  • minIdle
  • poolName
  • auto-commit
  • idle-timeout
  • max-lifetime
  • connection-timeout

初始化过程和连接创建逻辑:

当HikariCP初始化的时候,会添加连接到池中,直到达到min-idle的数量,此时保持这个状态。当有新的连接池请求时,HikariCP会返回一个connection的代理。当connection都处于使用状态时,若此时有新的连接池请求,HikariCP就会继续新建connection直到达到maximun-pool-size。

max-pool-size

池中最大连接数(包括控线和正在使用的连接)。默认值是10,这个一般预估应用的最大连接数,后期根据监测得到一个最大值的一个平均值。要知道,最大连接并不是越多越好,一个connection会占用系统的带宽和存储。但是 当连接池没有空闲连接并且已经到达最大值,新来的连接池请求(HikariPool#getConnection)会被阻塞直到connectionTimeout(毫秒),超时后便抛出SQLException。

min-idle

池中最小空闲连接数量。默认值10,小于池中最大连接数,一般根据系统大部分情况下的数据库连接情况取一个平均值。Hikari会尽可能、尽快地将空闲连接数维持在这个数量上。如果为了获得最佳性能和对峰值需求的响应能力,我们也不妨让他和最大连接数保持一致,使得HikariCP成为一个固定大小的数据库连接池。

pool-name

连接池的名字。一般会出现在日志和JMX控制台中。默认值:auto-genenrated。建议取一个合适的名字,便于监控。

auto-commit

是否自动提交池中返回的连接。默认值为true。一般是有必要自动提交上一个连接中的事务的。如果为false,那么就需要应用层手动提交事务。

idle-timeout

空闲时间。仅在min-idle小于max-pool-size的时候才会起作用。默认值10分钟。根据应用实际情况做调整,对于一些间歇性流量达到峰值的应用,一般需要考虑设置的比间歇时间更大,防止创建数据库连接拖慢了应用速度。

max-lifetime

连接池中连接的最大生命周期。当连接一致处于闲置状态时,数据库可能会主动断开连接。为了防止大量的同一时间处于空闲连接因为数据库方的闲置超时策略断开连接(可以理解为连接雪崩),一般将这个值设置的比数据库的“闲置超时时间”小几秒,以便这些连接断开后,HikariCP能迅速的创建新一轮的连接。

connection-timeout

连接超时时间。默认值为30s,可以接收的最小超时时间为250ms。但是连接池请求也可以自定义超时时间

配置HikariCP数据源

  1. # 等待连接池分配连接的最大时长(毫秒)
  2. #超过这个时长还没可用的连接则发生SQLException, 默认:30秒
  3. spring.datasource.hikari.connection-timeout=30000
  4. # 最小连接数
  5. spring.datasource.hikari.minimum-idle=5
  6. # 最大连接数
  7. spring.datasource.hikari.maximum-pool-size=15
  8. # 自动提交
  9. spring.datasource.hikari.auto-commit=true
  10. # 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),默认:10分钟
  11. spring.datasource.hikari.idle-timeout=600000
  12. # 连接池名字
  13. spring.datasource.hikari.pool-name=DatebookHikariCP
  14. # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
  15. #建议设置比数据库超时时长少60秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) -->
  16. spring.datasource.hikari.max-lifetime=28740000
  17. spring.datasource.hikari.connection-test-query=SELECT 1

28800