解決Spring Boot中Druid連接池“discard long time none received connection“警告
在使用Spring Boot結(jié)合Druid連接池時(shí),開發(fā)者可能會(huì)遇到"discard long time none received connection"的警告信息。雖然這通常不會(huì)影響應(yīng)用程序的正常運(yùn)行,但這些警告信息可能會(huì)讓人感到困擾。本文將探討這個(gè)問題的原因,并提供幾種解決方法。
問題現(xiàn)象
在使用Druid連接池的新版本(如1.2.5)時(shí),控制臺(tái)可能會(huì)時(shí)不時(shí)打印以下警告:
WARN com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : [your-jdbc-url]
這表明Druid連接池檢測到某些數(shù)據(jù)庫連接已經(jīng)超過了一定時(shí)間沒有活動(dòng),因此被標(biāo)記為長時(shí)間空閑并被丟棄。
產(chǎn)生原因
經(jīng)過查看Druid的源碼,發(fā)現(xiàn)這個(gè)問題的根源在于Druid連接池對(duì)MySQL連接的處理邏輯。在DruidAbstractDataSource類的testConnectionInternal方法中,如果連接空閑時(shí)間超過60秒,Druid會(huì)認(rèn)為該連接已經(jīng)不再有效,并將其丟棄。
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的配置,通過設(shè)置druid.mysql.usePingMethod=false來避免使用MySQL的Ping方法來檢查連接有效性。這可以通過以下兩種方式實(shí)現(xiàn):
- 運(yùn)行時(shí)配置:在運(yùn)行參數(shù)中增加
-Ddruid.mysql.usePingMethod=false。 - Spring配置:在Spring的配置文件中添加:
spring:
datasource:
druid:
mysql:
usePingMethod: false
2. 調(diào)整數(shù)據(jù)庫配置
另一種方法是調(diào)整數(shù)據(jù)庫的配置,例如MySQL的wait_timeout參數(shù),以增加數(shù)據(jù)庫端的空閑超時(shí)時(shí)間,從而減少因?yàn)閿?shù)據(jù)庫端關(guān)閉連接而導(dǎo)致Druid報(bào)錯(cuò)的情況。
3. 代碼層面的優(yōu)化
最后,確保應(yīng)用程序在使用數(shù)據(jù)庫連接時(shí),能夠及時(shí)釋放資源,避免不必要的連接泄露。
結(jié)語
雖然"discard long time none received connection"的警告可能不會(huì)直接影響應(yīng)用程序的運(yùn)行,但解決這個(gè)問題可以提高應(yīng)用程序的穩(wěn)定性,并減少不必要的資源浪費(fèi)。希望本文提供的方法能夠幫助你解決這個(gè)問題。
到此這篇關(guān)于解決Spring Boot中Druid連接池“discard long time none received connection“警告的文章就介紹到這了,更多相關(guān)Spring Boot Druid連接池警告內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法
- SpringBoot整合mybatis使用Druid做連接池的方式
- Springboot中加入druid連接池
- springboot2.0配置連接池(hikari、druid)的方法
- SpringBoot整合Druid實(shí)現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控
- springboot項(xiàng)目整合druid數(shù)據(jù)庫連接池的實(shí)現(xiàn)
- springboot集成druid連接池配置的方法
- springboot整合druid連接池的步驟
- SpringBoot使用 druid 連接池來優(yōu)化分頁語句
- SpringBoot整合Druid數(shù)據(jù)庫連接池的方法
相關(guān)文章
SpringBoot請求處理之常用參數(shù)注解介紹與源碼分析
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)請求處理、常用注解和方法參數(shù)的小技巧2022-10-10
Java中Druid連接池連接超時(shí)獲取不到連接的解決
這篇文章主要介紹了Java中Druid連接池連接超時(shí)獲取不到連接的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
java實(shí)現(xiàn)截取PDF指定頁并進(jìn)行圖片格式轉(zhuǎn)換功能
這篇文章主要介紹了java實(shí)現(xiàn)截取PDF指定頁并進(jìn)行圖片格式轉(zhuǎn)換功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
Spring使用ResourceLoader統(tǒng)一管理本地資源詳解
在項(xiàng)目開發(fā)中,我們經(jīng)常需要讀取各種本地資源文件,Spring 框架提供了一個(gè)強(qiáng)大而優(yōu)雅的解決方案,即ResourceLoader 接口,下面我們就來看看具體實(shí)現(xiàn)方法吧2026-01-01
Struts2學(xué)習(xí)教程之Action類如何訪問WEB資源
這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之Action類如何訪問WEB資源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04

