spring boot中配置hikari連接池屬性方式

spring boot配置hikari連接池屬性

事件起因與一個簡單應用經常發生Young GC,甚至在沒有請求量的情況下也經常發生GC (Allocation Failure),後來使用mat工具進行分析,發現mysql連接相關的class居然占瞭40%+堆內空間。

才發現spring boot的連接池大小沒有配置,默認是10個連接,但實際上該應用不需要這麼多。

The class "com.mysql.cj.jdbc.AbandonedConnectionCleanupThread", 
loaded by "org.apache.catalina.loader.ParallelWebappClassLoader @ 0xf8dfdf30", 
occupies 19,279,792 (41.23%) bytes. 
The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Node[]" 
loaded by "<system class loader>".

spring-boot默認連接池

spring-boot中,根據以下3個優先級加載連接池

1)如果classpath中有HikariCP,優先選擇它

2)如果Tomcat pooling 連接池可用,就會選擇它

3)如果以上都沒有,則會選擇Commons DBCP2連接池

Hikari配置

這裡我們做一個非常低的配置(這個僅僅是一個訪問量非常低的系統),如果默認的服務器,建議使用默認配置就足夠瞭。

spring.datasource.hikari.maximum-pool-size=2
spring.datasource.hikari.minimum-idle=1
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=500
spring.datasource.hikari.login-timeout=500
spring.datasource.hikari.validation-timeout=1000
spring.datasource.hikari.initialization-fail-timeout=1000

參考鏈接

Hikari連接池配置說明

## 數據庫配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
##  Hikari 連接池配置 ------ 詳細配置請訪問:https://github.com/brettwooldridge/HikariCP
## 最小空閑連接數量
spring.datasource.hikari.minimum-idle=5
## 空閑連接存活最大時間,默認600000(10分鐘)
spring.datasource.hikari.idle-timeout=180000
## 連接池最大連接數,默認是10
spring.datasource.hikari.maximum-pool-size=10
## 此屬性控制從池返回的連接的默認自動提交行為,默認值:true
spring.datasource.hikari.auto-commit=true
## 連接池名稱
spring.datasource.hikari.pool-name=MyHikariCP
## 此屬性控制池中連接的最長生命周期,值0表示無限生命周期,默認1800000即30分鐘
spring.datasource.hikari.max-lifetime=1800000
## 數據庫連接超時時間,默認30秒,即30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: