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

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

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

一、HikariCP YAML 配置詳解

HikariCP 是 Spring Boot 2.x 及更高版本的默認(rèn)數(shù)據(jù)庫連接池,以下是完整的 YAML 配置說明和優(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
      # 連接超時時間 (毫秒) (默認(rèn): 30000)
      connection-timeout: 30000
      # 連接最大存活時間 (毫秒) (建議比數(shù)據(jù)庫wait_timeout小2-3分鐘)
      max-lifetime: 1800000  # 30分鐘
      # 連接空閑超時時間 (毫秒) (默認(rèn): 600000)
      idle-timeout: 600000  # 10分鐘
      # 連接測試查詢 (部分?jǐn)?shù)據(jù)庫需要)
      connection-test-query: SELECT 1
      # 自動提交 (默認(rèn): true)
      auto-commit: true

高級配置

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

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

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

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

  • 連接池大小計算
    • 推薦公式: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ù)庫的wait_timeout小2-3分鐘
    • MySQL默認(rèn)wait_timeout是8小時(28800秒)
  • leak-detection-threshold
    • 開發(fā)環(huán)境可設(shè)置為60000(1分鐘)檢測連接泄漏
    • 生產(chǎn)環(huán)境建議設(shè)為0(禁用)以避免性能影響
  • 監(jiān)控集成
management:
  endpoints:
    web:
      exposure:
        include: health,metrics,info
  endpoint:
    health:
      show-details: always
      db:
        enabled: true

常見問題解決

連接泄漏錯誤

hikari:
  leak-detection-threshold: 60000  # 1分鐘檢測

連接超時問題

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

MySQL 8小時問題

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

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

二、拓展

1、什么是MySQL 8小時問題

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

問題本質(zhì)

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

解決方案

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

缺點(diǎn):只是推遲問題發(fā)生時間,沒有根本解決

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

HikariCP配置方案:

spring:
  datasource:
    hikari:
      # 設(shè)置max-lifetime略小于wait_timeout(7小時50分鐘)
      max-lifetime: 28200000  # 7小時50分鐘(單位毫秒)
      # 連接測試查詢
      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小時46分40秒)
  • 啟用連接測試
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;

問題驗(yàn)證方法

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

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

其他注意事項

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    java異或加密算法

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

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

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

    詳解JAVA中的OPTIONAL

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

    Maven setting.xml配置文件詳解

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

    Mybatis 開發(fā)注解快速入門

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

    Maven引用自定義jar包方式

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

最新評論

塘沽区| 巴林右旗| 紫云| 科技| 聊城市| 博湖县| 稷山县| 万年县| 沿河| 桃园县| 吴桥县| 张家口市| 忻州市| 综艺| 大安市| 镇原县| 芒康县| 扎鲁特旗| 黑河市| 屏东县| 保康县| 盘锦市| 乐东| 栾川县| 额济纳旗| 皋兰县| 得荣县| 土默特左旗| 开阳县| 龙游县| 兴宁市| 游戏| 宣恩县| 神木县| 高唐县| 凯里市| 焉耆| 甘洛县| 南郑县| 通化市| 镇平县|