SpringBoot 中使用HikariPool 報錯Possibly consider using a shorter maxLifetime value.

SpringBoot 使用HikariPool遇到:
HikariPool-1 - Failed to validate connection com.mysql.jdbc.JDBC4Connection@4933c203 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
錯誤還是比較明顯了 就是maxLifetime這個參數配置不合理

HikariPool 較佳配置
	hikari:
  		connection-timeout: 60000
 		validation-timeout: 3000
 		 idle-timeout: 60000
 		 login-timeout: 5	
 		 max-lifetime: 60000
  		maximum-pool-size: 10
  		minimum-idle: 10
  		read-only: false

親測有效

hikari 各參數解釋 https://github.com/brettwooldridge/HikariCP
autoCommit
此屬性控制從池返回的連接的默認自動提交行爲。它是一個布爾值。 默認值:true
connectionTimeout
此屬性控制客戶端(即您)等待來自池的連接的最大毫秒數。如果超過此時間而沒有可用的連接,則會拋出SQLException。可接受的最低連接超時爲250 ms。 默認值:30000(30秒)
idleTimeout
此屬性控制允許連接在池中保持空閒狀態的最長時間。 僅當minimumIdle定義爲小於時,此設置才適用maximumPoolSize。池達到連接後, 空閒連接將不會退出minimumIdle。連接是否以空閒狀態退役,最大變化爲+30秒,平均變化爲+15秒。在此超時之前,連接永遠不會因爲閒置而退役。值爲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
此屬性僅可通過編程配置或IoC容器使用。此屬性允許您設置的實例,該實例java.util.concurrent.ThreadFactory將用於創建池使用的所有線程。在某些只能通過ThreadFactory應用程序容器提供的線程創建線程的受限執行環境中,需要使用它。 默認值:無
scheduledExecutor
此屬性僅可通過編程配置或IoC容器使用。此屬性允許您設置的實例,該實例java.util.concurrent.ScheduledExecutorService將用於各種內部計劃的任務。如果向HikariCP提供ScheduledThreadPoolExecutor 實例,則建議使用該實例setRemoveOnCancelPolicy(true)。 默認值:無

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章