解決Spring Boot中Druid連接池“discard long time none received connection“警告
在使用Spring Boot結合Druid連接池時,開發(fā)者可能會遇到"discard long time none received connection"的警告信息。雖然這通常不會影響應用程序的正常運行,但這些警告信息可能會讓人感到困擾。本文將探討這個問題的原因,并提供幾種解決方法。
問題現象
在使用Druid連接池的新版本(如1.2.5)時,控制臺可能會時不時打印以下警告:
WARN com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : [your-jdbc-url]
這表明Druid連接池檢測到某些數據庫連接已經超過了一定時間沒有活動,因此被標記為長時間空閑并被丟棄。
產生原因
經過查看Druid的源碼,發(fā)現這個問題的根源在于Druid連接池對MySQL連接的處理邏輯。在DruidAbstractDataSource
類的testConnectionInternal
方法中,如果連接空閑時間超過60秒,Druid會認為該連接已經不再有效,并將其丟棄。
if (valid && isMySql) { long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn); if (lastPacketReceivedTimeMs > 0 && mysqlIdleMillis >= timeBetweenEvictionRunsMillis) { discardConnection(holder); LOG.warn("discard long time none received connection. " + ", jdbcUrl : " + jdbcUrl + ", version : " + VERSION.getVersionNumber() + ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis); return false; } }
解決辦法
1. 修改Druid配置
一種解決方法是修改Druid的配置,通過設置druid.mysql.usePingMethod=false
來避免使用MySQL的Ping方法來檢查連接有效性。這可以通過以下兩種方式實現:
- 運行時配置:在運行參數中增加
-Ddruid.mysql.usePingMethod=false
。 - Spring配置:在Spring的配置文件中添加:
spring: datasource: druid: mysql: usePingMethod: false
2. 調整數據庫配置
另一種方法是調整數據庫的配置,例如MySQL的wait_timeout
參數,以增加數據庫端的空閑超時時間,從而減少因為數據庫端關閉連接而導致Druid報錯的情況。
3. 代碼層面的優(yōu)化
最后,確保應用程序在使用數據庫連接時,能夠及時釋放資源,避免不必要的連接泄露。
結語
雖然"discard long time none received connection"的警告可能不會直接影響應用程序的運行,但解決這個問題可以提高應用程序的穩(wěn)定性,并減少不必要的資源浪費。希望本文提供的方法能夠幫助你解決這個問題。
到此這篇關于解決Spring Boot中Druid連接池“discard long time none received connection“警告的文章就介紹到這了,更多相關Spring Boot Druid連接池警告內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?IO流之StringWriter和StringReader用法分析
這篇文章主要介紹了Java?IO流之StringWriter和StringReader用法分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java如何獲取HttpServletRequest請求參數
我們常需要接口接收第三方推送的數據,由于第三方可能不具備開發(fā)能力,我們需要自行解析推送的數據格式,通過HttpServletRequest,我們可以解析字符串、JSON、XML以及文件等多種數據類型,本文介紹了如何在Java中使用HttpServletRequest獲取請求參數,感興趣的朋友一起看看吧2024-11-11SpringBoot實現ImportBeanDefinitionRegistrar動態(tài)注入
在閱讀Spring Boot源碼時,看到Spring Boot中大量使用ImportBeanDefinitionRegistrar來實現Bean的動態(tài)注入,它是Spring中一個強大的擴展接口,本文就來詳細的介紹一下如何使用,感興趣的可以了解一下2024-02-02Java設計模式之中介者模式(Mediator Pattern)簡介
這篇文章主要介紹了Java設計模式之中介者模式(Mediator Pattern),需要的朋友可以參考下2014-07-07SpringBoot訪問接口自動跳轉login頁面的問題及解決
這篇文章主要介紹了SpringBoot訪問接口自動跳轉login頁面的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Spring Boot 2.2 正式發(fā)布,大幅性能提升 + Java 13 支持
隨著 Spring Framework 5.2.0 成功發(fā)布之后,Spring Boot 2.2 也緊跟其后,發(fā)布了第一個版本:2.2.0。下面就來一起來看看這個版本都更新了些什么值得我們關注的內容2019-10-10maven依賴關系中的<scope>provided</scope>使用詳解
這篇文章主要介紹了maven依賴關系中的<scope>provided</scope>使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07