最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot HikariCP 連接池 YAML 配置最佳實(shí)踐

 更新時(shí)間:2025年12月29日 14:55:04   作者:ladymorgana  
本文介紹了HikariCP在Spring Boot 2.x及更高版本中的配置方法,包括基礎(chǔ)配置、高級(jí)配置、數(shù)據(jù)庫(kù)特定配置及MySQL和PostgreSQL的優(yōu)化建議,文章還討論了MySQL的8小時(shí)問(wèn)題,包括其本質(zhì)、常見(jiàn)解決方法,以及如何通過(guò)優(yōu)化連接池配置來(lái)避免該問(wèn)題,感興趣的朋友跟隨小編一起看看吧

一、HikariCP YAML 配置詳解

HikariCP 是 Spring Boot 2.x 及更高版本的默認(rèn)數(shù)據(jù)庫(kù)連接池,以下是完整的 YAML 配置說(shuō)明和優(yōu)化建議。

基礎(chǔ)配置

spring:
  datasource:
    hikari:
      # 連接池名稱 (用于監(jiān)控和日志)
      pool-name: MyHikariPool
      # 連接池中允許的最大連接數(shù) (默認(rèn): 10)
      maximum-pool-size: 20
      # 連接池中保持的最小空閑連接數(shù) (建議與maximum-pool-size相同)
      minimum-idle: 20
      # 連接超時(shí)時(shí)間 (毫秒) (默認(rèn): 30000)
      connection-timeout: 30000
      # 連接最大存活時(shí)間 (毫秒) (建議比數(shù)據(jù)庫(kù)wait_timeout小2-3分鐘)
      max-lifetime: 1800000  # 30分鐘
      # 連接空閑超時(shí)時(shí)間 (毫秒) (默認(rèn): 600000)
      idle-timeout: 600000  # 10分鐘
      # 連接測(cè)試查詢 (部分?jǐn)?shù)據(jù)庫(kù)需要)
      connection-test-query: SELECT 1
      # 自動(dòng)提交 (默認(rèn): true)
      auto-commit: true

高級(jí)配置

spring:
  datasource:
    hikari:
      # 數(shù)據(jù)源類(lèi)名 (通常不需要指定)
      data-source-class-name: com.zaxxer.hikari.HikariDataSource
      # 連接初始化SQL (每次新建連接后執(zhí)行)
      connection-init-sql: SET NAMES utf8mb4
      # 是否隔離自動(dòng)提交事務(wù) (默認(rèn): false)
      isolate-internal-queries: false
      # 是否注冊(cè)JMX (默認(rèn): false)
      register-mbeans: false
      # 連接泄漏檢測(cè)閾值 (毫秒) (0表示禁用)
      leak-detection-threshold: 0
      # 驗(yàn)證連接是否可用的超時(shí)時(shí)間 (毫秒)
      validation-timeout: 5000
      # 連接池準(zhǔn)備就緒前是否阻塞應(yīng)用啟動(dòng) (默認(rèn): true)
      initialization-fail-timeout: 1

數(shù)據(jù)庫(kù)特定配置

MySQL 優(yōu)化配置

spring:
  datasource:
    hikari:
      # MySQL 推薦配置
      connection-timeout: 30000
      max-lifetime: 1800000  # 30分鐘 (小于MySQL的wait_timeout)
      idle-timeout: 600000   # 10分鐘
      maximum-pool-size: 20
      minimum-idle: 20
      connection-test-query: SELECT 1
      # MySQL 連接屬性
      data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true
        useLocalSessionState: true
        rewriteBatchedStatements: true
        cacheResultSetMetadata: true
        cacheServerConfiguration: true
        elideSetAutoCommits: true
        maintainTimeStats: false

PostgreSQL 優(yōu)化配置

spring:
  datasource:
    hikari:
      # PostgreSQL 推薦配置
      maximum-pool-size: 15
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000
      # PostgreSQL 連接屬性
      data-source-properties:
        prepareThreshold: 3
        preferQueryMode: extended
        reWriteBatchedInserts: true

生產(chǎn)環(huán)境推薦配置

spring:
  datasource:
    hikari:
      pool-name: ${spring.application.name}-HikariCP
      maximum-pool-size: ${DB_POOL_SIZE:20}
      minimum-idle: ${DB_POOL_MIN_IDLE:20}
      max-lifetime: ${DB_MAX_LIFETIME:1800000}
      connection-timeout: ${DB_CONN_TIMEOUT:30000}
      idle-timeout: ${DB_IDLE_TIMEOUT:600000}
      leak-detection-threshold: ${DB_LEAK_DETECTION:0}
      connection-test-query: SELECT 1
      # MySQL 性能優(yōu)化參數(shù)
      data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true
        useLocalSessionState: true
        rewriteBatchedStatements: true

配置說(shuō)明與優(yōu)化建議

  • 連接池大小計(jì)算
    • 推薦公式:connections = ((core_count * 2) + effective_spindle_count)
    • 4核SSD系統(tǒng):(4*2)+1 = 9 → 設(shè)置為10-20
  • max-lifetime 設(shè)置
    • 應(yīng)比數(shù)據(jù)庫(kù)的wait_timeout小2-3分鐘
    • MySQL默認(rèn)wait_timeout是8小時(shí)(28800秒)
  • leak-detection-threshold
    • 開(kāi)發(fā)環(huán)境可設(shè)置為60000(1分鐘)檢測(cè)連接泄漏
    • 生產(chǎn)環(huán)境建議設(shè)為0(禁用)以避免性能影響
  • 監(jiān)控集成
management:
  endpoints:
    web:
      exposure:
        include: health,metrics,info
  endpoint:
    health:
      show-details: always
      db:
        enabled: true

常見(jiàn)問(wèn)題解決

連接泄漏錯(cuò)誤

hikari:
  leak-detection-threshold: 60000  # 1分鐘檢測(cè)

連接超時(shí)問(wèn)題

hikari:
  connection-timeout: 60000  # 增加到60秒
  initialization-fail-timeout: -1  # 永不超時(shí)

MySQL 8小時(shí)問(wèn)題

hikari:
  max-lifetime: 28000000  # 比8小時(shí)(28800000)少80秒
  connection-test-query: SELECT 1

HikariCP 的這些配置參數(shù)可以幫助您根據(jù)應(yīng)用需求優(yōu)化數(shù)據(jù)庫(kù)連接池性能,建議根據(jù)實(shí)際監(jiān)控?cái)?shù)據(jù)不斷調(diào)整優(yōu)化。

二、拓展

1、什么是MySQL 8小時(shí)問(wèn)題

MySQL 8小時(shí)問(wèn)題是指當(dāng)數(shù)據(jù)庫(kù)連接空閑時(shí)間超過(guò)8小時(shí)后,MySQL服務(wù)器會(huì)自動(dòng)斷開(kāi)連接,而連接池并不知道這個(gè)連接已經(jīng)失效,導(dǎo)致應(yīng)用嘗試使用這些被斷開(kāi)的連接時(shí)出現(xiàn)錯(cuò)誤的問(wèn)題。

問(wèn)題本質(zhì)

  • MySQL默認(rèn)配置
    • wait_timeout參數(shù)默認(rèn)為28800秒(8小時(shí))
    • 表示如果一個(gè)連接空閑超過(guò)8小時(shí),MySQL服務(wù)器會(huì)自動(dòng)關(guān)閉它
  • 連接池行為
    • 連接池中的連接被應(yīng)用使用后返回到池中
    • 如果連接長(zhǎng)時(shí)間未被使用(超過(guò)8小時(shí)),MySQL會(huì)關(guān)閉它
    • 但連接池仍然認(rèn)為這些連接是有效的
  • 問(wèn)題表現(xiàn)
    • 應(yīng)用嘗試使用這些"僵尸連接"時(shí)會(huì)報(bào)錯(cuò):
Communications link failure
The last packet successfully received from the server was X milliseconds ago
  • 通常發(fā)生在應(yīng)用長(zhǎng)時(shí)間低負(fù)載運(yùn)行后(如夜間)

解決方案

1. 調(diào)整MySQL配置(不推薦)
-- 增加wait_timeout(不推薦,只是延遲問(wèn)題出現(xiàn)時(shí)間)
SET GLOBAL wait_timeout=86400; -- 24小時(shí)

缺點(diǎn):只是推遲問(wèn)題發(fā)生時(shí)間,沒(méi)有根本解決

2. 優(yōu)化連接池配置(推薦)

HikariCP配置方案:

spring:
  datasource:
    hikari:
      # 設(shè)置max-lifetime略小于wait_timeout(7小時(shí)50分鐘)
      max-lifetime: 28200000  # 7小時(shí)50分鐘(單位毫秒)
      # 連接測(cè)試查詢
      connection-test-query: SELECT 1
      # 空閑連接檢查
      idle-timeout: 600000  # 10分鐘空閑后檢查

Druid配置方案:

spring:
  datasource:
    druid:
      # 定期檢查空閑連接
      time-between-eviction-runs-millis: 60000  # 60秒檢查一次
      min-evictable-idle-time-millis: 1800000  # 30分鐘空閑就回收
      test-while-idle: true  # 檢查空閑連接有效性
      validation-query: SELECT 1
3. 最佳實(shí)踐組合
  • 設(shè)置合理的max-lifetime
    • 比MySQL的wait_timeout少2-3分鐘
    • 例如:max-lifetime: 28000000(7小時(shí)46分40秒)
  • 啟用連接測(cè)試
hikari:
  connection-test-query: SELECT 1
  # 或者使用更好的validation-timeout
  validation-timeout: 5000

定期心跳(適合生產(chǎn)環(huán)境)

-- 在MySQL中設(shè)置
SET GLOBAL interactive_timeout = 3600;
SET GLOBAL wait_timeout = 3600;

問(wèn)題驗(yàn)證方法

查看當(dāng)前MySQL超時(shí)設(shè)置

SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
  • 模擬測(cè)試
    • 將wait_timeout設(shè)為很短時(shí)間(如60秒)
    • 觀察連接池行為
  • 監(jiān)控連接狀態(tài)
SHOW PROCESSLIST;

其他注意事項(xiàng)

  • 不同驅(qū)動(dòng)的影響
    • MySQL Connector/J 8.0+有更好的連接失效檢測(cè)機(jī)制
    • 建議使用最新驅(qū)動(dòng)
  • 云數(shù)據(jù)庫(kù)差異
    • AWS RDS/Aurora等可能有不同的默認(rèn)超時(shí)設(shè)置
    • 需要檢查云服務(wù)商的具體配置
  • 連接泄漏的混淆
    • 真正的連接泄漏也會(huì)導(dǎo)致類(lèi)似錯(cuò)誤
    • 需要區(qū)分是8小時(shí)問(wèn)題還是應(yīng)用代碼泄漏連接

通過(guò)合理配置連接池參數(shù)和MySQL參數(shù),可以完全避免8小時(shí)問(wèn)題,確保應(yīng)用穩(wěn)定運(yùn)行。

到此這篇關(guān)于Spring Boot HikariCP 連接池 YAML 配置詳解的文章就介紹到這了,更多相關(guān)Spring Boot HikariCP 連接池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Win10安裝Maven與環(huán)境變量配置過(guò)程

    Win10安裝Maven與環(huán)境變量配置過(guò)程

    本文介紹Maven的安裝與配置方法,涵蓋下載、環(huán)境變量設(shè)置、本地倉(cāng)庫(kù)及鏡像配置,指導(dǎo)如何在IDEA中正確配置Maven,適用于Java及其他語(yǔ)言項(xiàng)目的構(gòu)建與依賴管理
    2025-08-08
  • 利用java模擬實(shí)現(xiàn)鍵盤(pán)鼠標(biāo)操作(附源碼)

    利用java模擬實(shí)現(xiàn)鍵盤(pán)鼠標(biāo)操作(附源碼)

    這篇文章主要為大家詳細(xì)介紹了如何從零設(shè)計(jì)并實(shí)現(xiàn)一個(gè)功能完備的鍵盤(pán)鼠標(biāo)模擬庫(kù),提供比原生?Robot?更友好的?API,更高的可定制性和可擴(kuò)展性,感興趣的小伙伴可以了解一下
    2025-05-05
  • java多線程實(shí)現(xiàn)文件下載

    java多線程實(shí)現(xiàn)文件下載

    這篇文章主要為大家詳細(xì)介紹了java多線程實(shí)現(xiàn)文件下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    這篇文章主要介紹了Spring BeanPostProcessor的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java異或加密算法

    java異或加密算法

    這篇文章主要介紹了java異或加密算法,有需要的朋友可以參考一下
    2013-12-12
  • 通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析

    通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了通過(guò)pipeline配置sonar自動(dòng)化實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解JAVA中的OPTIONAL

    詳解JAVA中的OPTIONAL

    從Java 8引入的一個(gè)很有趣的特性是Optional類(lèi)。Optional類(lèi)主要解決的問(wèn)題是臭名昭著的空指針異常(NullPointerException)
    2021-06-06
  • Maven setting.xml配置文件詳解

    Maven setting.xml配置文件詳解

    本篇文章主要介紹了Maven setting.xml 配置文件詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Mybatis 開(kāi)發(fā)注解快速入門(mén)

    Mybatis 開(kāi)發(fā)注解快速入門(mén)

    mybatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了Mybatis 開(kāi)發(fā)注解快速入門(mén)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Maven引用自定義jar包方式

    Maven引用自定義jar包方式

    這篇文章主要介紹了Maven引用自定義jar包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論

涟源市| 台江县| 梁河县| 新巴尔虎左旗| 苗栗市| 菏泽市| 金溪县| 宜春市| 利津县| 信丰县| 东光县| 吉木萨尔县| 金秀| 岢岚县| 怀柔区| 昌江| 伊吾县| 岑巩县| 福鼎市| 应用必备| 墨江| 肇东市| 乌鲁木齐市| 柳河县| 景洪市| 临泉县| 如皋市| 榆中县| 都昌县| 韩城市| 绥化市| 北流市| 体育| 璧山县| 化隆| 云梦县| 天祝| 绥滨县| 桐柏县| 察隅县| 高邮市|