日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot集成Druid出現異常報錯的原因及解決

瀏覽:28日期:2023-07-13 14:45:20
目錄Spring Boot集成Druid異常異常分析原理追蹤禁用Ping Method為什么要清空空閑60秒以上的連接Spring Boot集成Druid異常

在Spring Boot集成Druid項目中,發現錯誤日志中頻繁的出現如下錯誤信息:

discard long time none received connection. , jdbcUrl : jdbc:mysql://******?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8, version : 1.2.3, lastPacketReceivedIdleMillis : 172675

經過排查發現是Druid版本導致的異常,在1.2.2及以前版本并未出現如此異常。而在其以上版本均存在此問題,下面就來分析一下異常原因及解決方案。

異常分析

首先上面的異常并不影響程序的正常運行,但作為程序員看到程序中不停的出現異常還是難以忍受的。所以還是要刨根問底的解決一下的。

跟蹤堆棧信息會發現對應的異常是從com.alibaba.druid.pool.DruidAbstractDataSource#testConnectionInternal方法中拋出的,對應的代碼如下:

if (valid && isMySql) { // unexcepted branch long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn); if (lastPacketReceivedTimeMs > 0) {long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;if (lastPacketReceivedTimeMs > 0 //&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) { discardConnection(holder); String errorMsg = 'discard long time none received connection. ' + ', jdbcUrl : ' + jdbcUrl + ', jdbcUrl : ' + jdbcUrl + ', lastPacketReceivedIdleMillis : ' + mysqlIdleMillis; LOG.error(errorMsg); return false;} }}

上述代碼中,MySqlUtils.getLastPacketReceivedTimeMs(conn) 是獲取上一次使用的時間,mysqlIdleMillis 就是計算出來空閑的時間,timeBetweenEvictionRunsMillis 是常量60秒。如果連接空閑了60秒以上,那就discardConnection(holder) 丟棄這個舊連接并順帶打印了一個日志LOG.warn(errorMsg)。

原理追蹤

在上述代碼中,我們看到進入該業務邏輯是有前提條件的,也就是valid和isMySql變量同時為true。isMySql為true是必須的,我們使用的本身就是Mysql數據庫。那么是否可以讓valid為false呢?這樣不就不會進入該業務處理了嗎?

來看看valid的來源,還是在該方法的上面:

boolean valid = validConnectionChecker.isValidConnection(conn, validationQuery, validationQueryTimeout);

我們找到validConnectionChecker的Mysql實現子類MySqlValidConnectionChecker,該類中對isValidConnection的實現如下:

public boolean isValidConnection(Connection conn, String validateQuery, int validationQueryTimeout) throws Exception { if (conn.isClosed()) {return false; } if (usePingMethod) {if (conn instanceof DruidPooledConnection) { conn = ((DruidPooledConnection) conn).getConnection();}if (conn instanceof ConnectionProxy) { conn = ((ConnectionProxy) conn).getRawObject();}if (clazz.isAssignableFrom(conn.getClass())) { if (validationQueryTimeout <= 0) {validationQueryTimeout = DEFAULT_VALIDATION_QUERY_TIMEOUT; } try {ping.invoke(conn, true, validationQueryTimeout * 1000); } catch (InvocationTargetException e) {Throwable cause = e.getCause();if (cause instanceof SQLException) { throw (SQLException) cause;}throw e; } return true;} } String query = validateQuery; if (validateQuery == null || validateQuery.isEmpty()) {query = DEFAULT_VALIDATION_QUERY; } Statement stmt = null; ResultSet rs = null; try {stmt = conn.createStatement();if (validationQueryTimeout > 0) { stmt.setQueryTimeout(validationQueryTimeout);}rs = stmt.executeQuery(query);return true; } finally {JdbcUtils.close(rs);JdbcUtils.close(stmt); }}

我們可以看到上述方法中有三個返回的地方:第一個連接已關閉;第二個使用ping的形式進行檢查;第三,使用select 1的方式進行檢查。而使用ping的形式檢查時,無論是否拋異常都會返回true。這里我們禁用該模式即可。

進入ping的業務邏輯主要靠變量usePingMethod來判斷,追蹤代碼會發現在這里進行的設置:

public void configFromProperties(Properties properties) { String property = properties.getProperty('druid.mysql.usePingMethod'); if ('true'.equals(property)) {setUsePingMethod(true); } else if ('false'.equals(property)) {setUsePingMethod(false); }}

那么,也就是說,當我們把系統屬性druid.mysql.usePingMethod設置為false即可禁用該功能。

禁用Ping Method

找到了問題的根源,那么剩下的就是如何禁用了,通常有三種形式。

第一,在啟動程序時在運行參數中增加:-Ddruid.mysql.usePingMethod=false。

第二,在Spring Boot項目中,可在啟動類中添加如下靜態代碼快:

static { System.setProperty('druid.mysql.usePingMethod','false');}

第三,類文件配置。在項目的DruidConfig類中新增加:

/** 解決druid 日志報錯:discard long time none received connection:xxx* */@PostConstructpublic void setProperties(){ System.setProperty('druid.mysql.usePingMethod','false');}

至此,已可以成功關閉該功能,異常信息再也不會出現了。

為什么要清空空閑60秒以上的連接

猜測,阿里給數據庫設置的數據庫空閑等待時間是60秒,mysql數據庫到了空閑等待時間將關閉空閑的連接,以提升數據庫服務器的處理能力。

MySQL的默認空閑等待時間是8小時,就是「wait_timeout」的配置值。如果數據庫主動關閉了空閑的連接,而連接池并不知道,還在使用這個連接,就會產生異常。

以上就是Spring Boot集成Druid出現異常報錯的原因及解決的詳細內容,更多關于Spring Boot集成Druid出現異常的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产一区二区三区| 91久久亚洲| 亚洲资源在线| 久久婷婷亚洲| 香蕉久久夜色精品国产| 国产一区亚洲| 亚洲精品va| 国产免费成人| 免费不卡中文字幕在线| 亚洲a成人v| 国产综合欧美| 日本不卡不码高清免费观看| 欧美综合另类| 国产一区二区亚洲| 电影91久久久| 在线观看免费一区二区| 日韩1区2区3区| 欧美aa在线观看| 最新亚洲国产| 国产精品婷婷| 亚洲精品乱码久久久久久蜜桃麻豆| 中文av在线全新| 日韩精品成人在线观看| 国产一区国产二区国产三区 | 91精品国产91久久久久久黑人| 国产精品亚洲产品| 国产亚洲精品美女久久久久久久久久| 欧美a级一区| 国产福利一区二区三区在线播放| 亚洲经典在线| 在线综合视频| 在线视频精品| 亚洲激情黄色| 老牛国产精品一区的观看方式| 私拍精品福利视频在线一区| 日韩av二区| 久久久精品久久久久久96| 综合在线一区| 国产精品日本| 国产一区清纯| 丝袜美腿亚洲一区| 日韩午夜电影| 国产91欧美| 国产精品magnet| 国产一区成人| 美女网站一区| 欧美丰满日韩| 久久av日韩| 久久精品欧洲| 国产一区一一区高清不卡| 日韩av一区二区三区四区| 黑森林国产精品av| 欧美日韩国产在线一区| 国产一区二区三区免费在线| 国产欧美日韩影院| 蜜臀av一区二区三区| 国产精品白丝久久av网站| 久久亚洲国产| 日韩欧美2区| 亚洲综合不卡| 国产日产精品一区二区三区四区的观看方式| 日韩av专区| 一区二区电影在线观看| 卡一卡二国产精品| 欧美国产极品| 电影亚洲精品噜噜在线观看| 国产经典一区| 欧美搞黄网站| 91精品在线免费视频| 国产精品亚洲欧美日韩一区在线| 国产一区二区三区探花| 男人的天堂久久精品| 88久久精品| 精品捆绑调教一区二区三区| 日韩欧美久久| 久久国产福利| 婷婷综合社区| 欧美在线日韩| 美女久久99| 视频在线观看一区| 亚洲精品九九| 九色porny丨国产首页在线| 日韩午夜视频在线| 一本综合精品| 国产99精品一区| 欧美在线不卡| 亚洲二区视频| 久久婷婷亚洲| 自拍日韩欧美| 亚州欧美在线| 免费久久99精品国产自在现线| 国产综合精品| 中文另类视频| 97精品国产一区二区三区| 亚洲精品观看| 亚洲一卡久久| 色婷婷精品视频| 国产一区成人| 99亚洲视频| 亚洲精品免费观看| 亚洲免费在线| 国产一区二区三区不卡av| 日本在线啊啊| 欧美日韩在线观看视频小说| 美女久久99| 国产精品免费大片| 国产精品亚洲产品| 欧美黑人巨大videos精品| 99久久夜色精品国产亚洲1000部 | 国产精品视频首页| 欧美日韩一区二区综合| 日韩欧美美女在线观看| 欧美激情 亚洲a∨综合| 性感美女一区二区在线观看| 国产精品人人爽人人做我的可爱| 日韩和欧美一区二区| 精品精品国产三级a∨在线| 国产日韩电影| 伊人www22综合色| 麻豆免费精品视频| 麻豆视频在线观看免费网站黄| 欧美美女一区| 日韩美女国产精品| 国产传媒在线观看| 日韩欧美2区| 国产在视频一区二区三区吞精| 成人日韩精品| 日韩精品一区二区三区中文 | 午夜久久免费观看| 亚洲成人三区| 美女av在线免费看| 久久久久99| 水野朝阳av一区二区三区| 中文字幕日本一区二区| 国产精品宾馆| 日本不卡中文字幕| 伊人精品在线| 中文日韩在线| av亚洲免费| 久久精品一区二区三区中文字幕| 欧美精品一区二区久久| 国产精品videossex| 日韩精品乱码av一区二区| 久久精品官网| 国产欧美丝祙| 中文字幕一区二区三区日韩精品| 91精品国产自产观看在线 | 日韩精品电影一区亚洲| 91av亚洲| 欧美久久久网站| 欧美午夜不卡影院在线观看完整版免费| 国产一区二区三区四区五区| 久久婷婷av| 精品中文字幕一区二区三区四区| 亚洲综合另类| 日韩一区网站| 制服诱惑一区二区| 在线综合亚洲| 蜜臀91精品国产高清在线观看| 日韩av一级| 一区二区自拍| 最新国产精品| 精品成av人一区二区三区| 亚洲一级影院| 麻豆传媒一区二区三区| 国产精品av一区二区| 蜜桃久久久久久| 欧美综合另类| 香蕉成人av| 国产成人精品亚洲线观看| 国产一区二区三区四区二区 | 天堂精品久久久久| 欧美精品观看| 日韩欧美久久| 国产 日韩 欧美 综合 一区| 欧美成人一二区| 99精品视频在线观看免费播放| 欧美综合另类| 天堂中文在线播放| 亚洲另类av| 免费在线观看一区二区三区| 国产不卡精品| 国产精品主播| 日本91福利区| 欧美综合国产| 国产亚洲高清视频| 亚洲精品永久免费视频| 九九九精品视频| 国产精品一区亚洲| 青草av.久久免费一区| 亚洲香蕉久久| 亚洲人成在线影院| 免费观看日韩电影| 鲁大师影院一区二区三区| 午夜影院欧美| 国产精品普通话对白| 欧美日韩国产综合网| 日韩不卡免费高清视频| 日韩欧美字幕| 在线视频观看日韩|