springboot2中HikariCP連接池的相關(guān)配置問題
springboot2 HikariCP連接池相關(guān)配置
項(xiàng)目中使用了springboot2.1.4作為框架,數(shù)據(jù)庫鏈接池選用了號稱非??斓囊彩莝pringboot默認(rèn)支持的HikariCP作為連接池。
引入springboot完全支持,所以不需要引入額外的jar,配置文件如下:
spring: application: name: framework-manage profiles: active: dev #數(shù)據(jù)庫連接 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
在剛開始配置時(shí)候,將max-lifetime設(shè)置為1800000(網(wǎng)上很多博客設(shè)置均為這個(gè)),隔上一段時(shí)間不連接,就會出現(xiàn)以下警告,需要等待四五個(gè)這種警告后,才能請求回?cái)?shù)據(jù)。
DatebookHikariCP - Failed to validate connection
com.mysql.cj.jdbc.ConnectionImpl@23338be2 (No operations allowed after connection closed.)
. Possibly consider using a shorter maxLifetime value.
修改過數(shù)據(jù)庫的相關(guān)配置,還是不行,后來翻譯了下這段話,發(fā)現(xiàn)是說可能考慮使用較短的maxLifetime值,這個(gè)值最小是30000,于是將其修改為30000后,又出現(xiàn)了下面這個(gè)警告:
DatebookHikariCP - idleTimeout is close to or more than maxLifetime, disabling it.
這個(gè)只是在啟動時(shí)候出現(xiàn),并不影響操作,后來查詢發(fā)現(xiàn),設(shè)置idleTimeout 時(shí)候有一個(gè)規(guī)則,即如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,則會被重置為0(代表永遠(yuǎn)不會退出);如果idleTimeout!=0且小于10秒,則會被重置為10秒。
于是將max-lifetime設(shè)置為了120000,這個(gè)問題不在出現(xiàn)。
HikariCP常用的參數(shù)配置
1.autoCommit
自動提交從池中返回的連接,默認(rèn)為true。
2.connectionTimeout
等待來自池的連接的最大毫秒數(shù),默認(rèn)為30000,如果小于250毫秒,則被重置回30秒。
3.idleTimeout
連接允許在池中閑置的最長時(shí)間,默認(rèn)為600000,即10分鐘。
如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,則會被重置為0(代表永遠(yuǎn)不會退出);如果idleTimeout!=0且小于10秒,則會被重置為10秒。
只有當(dāng)minimumIdle小于maximumPoolSize時(shí),這個(gè)參數(shù)才生效,當(dāng)空閑連接數(shù)超過minimumIdle,而且空閑時(shí)間超過idleTimeout,則會被移除。
4.maxLifetime
池中連接最長生命周期。默認(rèn)為1800000,如果不等于0且小于30秒則會被重置回30分鐘。
5.minimumIdle
控制連接池空閑連接的最小數(shù)量,當(dāng)連接池空閑連接少于minimumIdle,而且總共連接數(shù)不大于maximumPoolSize時(shí),HikariCP會盡力補(bǔ)充新的連接。
為了性能考慮,不建議設(shè)置此值,而是讓HikariCP把連接池當(dāng)做固定大小的處理,默認(rèn)minimumIdle與maximumPoolSize一樣。
當(dāng)minIdle<0或者minIdle>maxPoolSize,則被重置為maxPoolSize,該值默認(rèn)為10。
6.maximumPoolSize
池中最大連接數(shù),包括閑置和使用中的連接。
默認(rèn)為10。
如果maxPoolSize小于1,則會被重置。
當(dāng)minIdle<=0被重置為DEFAULT_POOL_SIZE則為10;如果minIdle>0則重置為minIdle的值。
7.poolName
連接池的用戶定義名稱,主要出現(xiàn)在日志記錄和JMX管理控制臺中以識別池和池配置。
默認(rèn)為HikariPool-1。
8.readOnly
從池中獲取的連接是否默認(rèn)處于只讀模式。
默認(rèn)為false。
9.connection-test-query
如果您的驅(qū)動程序支持JDBC4,我們強(qiáng)烈建議您不要設(shè)置此屬性。
這是針對不支持JDBC4的“傳統(tǒng)”驅(qū)動程序Connection.isValid() API。
這是在連接從池中獲得連接以確認(rèn)與數(shù)據(jù)庫的連接仍然存在之前將要執(zhí)行的查詢。
再一次,嘗試運(yùn)行沒有此屬性的池,如果您的驅(qū)動程序不符合JDBC4的要求,HikariCP將記錄一個(gè)錯(cuò)誤以告知您。
默認(rèn)值:無
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入學(xué)習(xí)java中的Groovy 和 Scala 類
本文將探討三種下一代 JVM 語言:Groovy、Scala 和 Clojure,比較并對比新的功能和范例,讓 Java 開發(fā)人員對自己近期的未來發(fā)展有大體的認(rèn)識。,需要的朋友可以參考下2019-06-06