天天看點

Spring Boot--Hikari連接配接池的配置方法

簡介

說明

        本文介紹Spring Boot的Hikari連接配接池的配置方法。

官網網址

SpringBoot官網(無解析):​​Common Application Properties​​

Hikari的github(有解析):​​https://github.com/brettwooldridge/HikariCP#gear-configuration-knobs-baby​​

配置概述

在Spring Boot自動化配置中,對于資料源的配置可以分為兩類:

通用配置

        以spring.datasource.*的形式存在,主要是配置一些正常内容。比如:資料庫連結位址、使用者名、密碼等。這裡就不做過多說明了,通常就這些配置:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test
    username: root
    password: 222333      

資料源連接配接池配置

以spring.datasource.<資料源名稱>.*的形式存在,比如:Hikari的配置參數就是spring.datasource.hikari.*形式。下面這個是我們最常用的幾個配置項及對應說明:

spring:
  datasource:
    hikari:
      connection-timeout: 10000
    validation-timeout: 3000
    idle-timeout: 60000
    login-timeout: 5  
    max-lifetime: 60000
      maximum-pool-size: 10
      minimum-idle: 5
      read-only: false      

配置示例

下邊是推薦使用的配置

spring:
  datasource:
    hikari:
      connection-timeout: 10000
    validation-timeout: 3000
    idle-timeout: 60000
    login-timeout: 5  
    max-lifetime: 60000
      maximum-pool-size: 10
      minimum-idle: 5
      read-only: false      

配置詳解

autoCommit

        此屬性控制從池傳回的連接配接的預設自動送出行為。它是一個布爾值。 預設值:true

connectionTimeout

        此屬性控制用戶端(即您)等待來自池的連接配接的最大毫秒數。如果超過此時間而沒有可用的連接配接,則會抛出SQLException。可接受的最低連接配接逾時為250 ms。 預設值:30000(30秒)

idleTimeout

        此屬性控制允許連接配接在池中保持空閑狀态的最長時間。 僅當minimumIdle定義為小于時,此設定才适用maximumPoolSize。池達到連接配接後, 空閑連接配接将不會退出minimumIdle。連接配接是否以空閑狀态退役,最大變化為+30秒,平均變化為+15秒。在此逾時之前,連接配接永遠不會因為閑置而退役。值必須比maxLifetime小。值為0表示永遠不會從池中删除空閑連接配接。最小允許值為10000ms(10秒)。 預設值:600000(10分鐘)

maxLifetime

        此屬性控制池中連接配接的最大生存期。使用中的連接配接永遠不會停止使用,隻有在關閉連接配接後才将其删除。在逐個連接配接的基礎上,應用較小的負衰減以避免池中的品質消滅。 我們強烈建議設定此值,它應該比任何資料庫或基礎結構施加的連接配接時間限制短幾秒鐘。 值0表示沒有最大壽命(無限壽命),當然要遵守該idleTimeout設定。最小允許值為30000ms(30秒)。 預設值:1800000(30分鐘)

connectionTestQuery

        如果您的驅動程式支援JDBC4,我們強烈建議不要設定此屬性。這是針對不支援JDBC4的“舊版”驅動程式的Connection.isValid() API。這是将在從池中為您提供連接配接之前執行的查詢,以驗證與資料庫的連接配接仍然有效。同樣,嘗試運作不帶該屬性的池,如果驅動程式不相容JDBC4,HikariCP将記錄錯誤。 預設值:無

minimumIdle

        此屬性控制HikariCP嘗試在池中維護的最小空閑連接配接數。如果空閑連接配接下降到該值以下,并且池中的總連接配接數少于maximumPoolSize,則HikariCP将盡最大努力快速而有效地添加其他連接配接。但是,為了獲得最佳性能和對峰值需求的響應能力,我們建議不要設定此值,而應讓HikariCP充當固定大小的連接配接池。 預設值:與maximumPoolSize相同

maximumPoolSize

        此屬性控制允許池達到的最大大小,包括空閑和使用中的連接配接。基本上,此值将确定到資料庫後端的最大實際連接配接數。合理的值最好由您的執行環境确定。當池達到此大小并且沒有空閑連接配接可用時,對getConnection()的調用将connectionTimeout在逾時之前最多阻塞毫秒。請閱讀有關池大小的資訊。 預設值:10

metricRegistry

        此屬性僅可通過程式設計配置或IoC容器使用。此屬性允許您指定池将用于記錄各種名額的Codahale / Dropwizard 的執行個體MetricRegistry。有關 詳細資訊,請參見Metrics Wiki頁面。 預設值:無

healthCheckRegistry

        此屬性僅可通過程式設計配置或IoC容器使用。此屬性允許您指定池将用于報告目前健康資訊的Codahale / Dropwizard 的執行個體HealthCheckRegistry。有關 詳細資訊,請參見運作狀況檢查 Wiki頁面。 預設值:無

poolName

        該屬性表示連接配接池的使用者定義名稱,主要出現在日志記錄和JMX管理控制台中,以識别池和池配置。 預設值:自動生成

很少使用的配置

initializationFailTimeout

        此屬性控制如果無法為初始連接配接成功播種池,則池是否将“快速失敗”。任何正數都是嘗試擷取初始連接配接的毫秒數;在此期間,應用程式線程将被阻止。如果在此逾時發生之前無法擷取連接配接,則将引發異常。此逾時被應用後的connectionTimeout 期。如果該值為零(0),則HikariCP将嘗試擷取并驗證連接配接。如果獲得連接配接,但驗證失敗,則将引發異常并且池不啟動。但是,如果無法獲得連接配接,則池将啟動,但是以後獲得連接配接的努力可能會失敗。小于零的值将繞過任何初始連接配接嘗試,并且池将在嘗試在背景擷取連接配接時立即啟動。是以,以後獲得連接配接的努力可能會失敗。 預設值:1

isolateInternalQueries

        此屬性确定HikariCP是否在其自己的事務中隔離内部池查詢,例如連接配接活動測試。由于這些通常是隻讀查詢,是以幾乎沒有必要将它們封裝在自己的事務中。此屬性僅在autoCommit禁用時适用。 預設值:false

allowPoolSuspension

        此屬性控制是否可以通過JMX暫停和恢複池。這對于某些故障轉移自動化方案很有用。當池被暫停,調用 getConnection()将不會逾時,将一直保持到池恢複。 預設值:false

readOnly

        此屬性控制預設情況下從池獲得的連接配接是否處于隻讀模式。請注意,某些資料庫不支援隻讀模式的概念,而另一些資料庫在将Connection設定為隻讀時提供查詢優化。是否需要此屬性在很大程度上取決于您的應用程式和資料庫。 預設值:false

registerMbeans

此屬性控制是否注冊JMX管理Bean(“ MBean”)。 預設值:false

catalog

        該屬性設定預設目錄為支援目錄的概念資料庫。如果未指定此屬性,則使用JDBC驅動程式定義的預設目錄。 預設值:驅動程式預設值

connectionInitSql

        此屬性設定一個SQL語句,該語句将在每次建立新連接配接後執行,然後再将其添加到池中。如果此SQL無效或引發異常,它将被視為連接配接失敗,并且将遵循标準的重試邏輯。 預設值:無

driverClassName

        HikariCP将嘗試僅通過來通過DriverManager解析驅動程式jdbcUrl,但對于某些較舊的驅動程式,driverClassName也必須指定。除非獲得明顯的錯誤消息,表明未找到驅動程式,否則請忽略此屬性。 預設值:無

transactionIsolation

        此屬性控制從池傳回的連接配接的預設事務隔離級别。如果未指定此屬性,則使用JDBC驅動程式定義的預設事務隔離級别。僅當您具有所有查詢通用的特定隔離要求時,才使用此屬性。此屬性的值是從不斷的名稱Connection 類,如TRANSACTION_READ_COMMITTED,TRANSACTION_REPEATABLE_READ等 預設值:驅動程式預設

validationTimeout

        此屬性控制将測試連接配接的活動性的最長時間。此值必須小于connectionTimeout。可接受的最低驗證逾時為250毫秒。 預設值:5000

leakDetectionThreshold

        此屬性控制在記錄表示可能的連接配接洩漏的消息之前,連接配接可以離開池的時間。值為0表示禁用洩漏檢測。啟用洩漏檢測的最低可接受值為2000(2秒)。 預設值:0

dataSource

        此屬性僅可通過程式設計配置或IoC容器使用。通過此屬性,您可以直接設定DataSource要由池包裝的的執行個體,而不必讓HikariCP通過反射來構造它。這在某些依賴項注入架構中可能很有用。指定此屬性後,dataSourceClassName将忽略該屬性和所有特定于DataSource的屬性。 預設值:無

schema

        該屬性設定的預設模式為支援模式的概念資料庫。如果未指定此屬性,則使用JDBC驅動程式定義的預設模式。 預設值:驅動程式預設值

threadFactory