摘要:一監(jiān)控一般思路中監(jiān)控一般通過代理模式實(shí)現(xiàn),如下右邊是接口類。配置將項(xiàng)目下文件放到目錄下或者中,找到將類名修改為你自己的實(shí)現(xiàn)類,并去掉其他所有配置都不用修改就可以監(jiān)控到。至此,可以監(jiān)控到語句了。
一、SQL監(jiān)控一般思路
Java中SQL監(jiān)控一般通過代理模式實(shí)現(xiàn),如下:
右邊是JDBC接口類。
左邊是代理類,代理類需要實(shí)現(xiàn)JDBC接口,同時(shí)持有接口類的對象實(shí)例。
數(shù)據(jù)庫連接工廠原來是獲得JDBC接口類后繼續(xù)操作,改為獲取代理類去操作,因代理類實(shí)現(xiàn)了JDBC接口,所以對調(diào)用方來說無感知,仍然以原有的方式調(diào)用。
因此,最差情況是自行實(shí)現(xiàn)代理類,難度不大,只是所有接口方法都要實(shí)現(xiàn)一遍,純體力活。
二、開源JAVA SQL監(jiān)控工具p6spyp6spy是一款Java開源監(jiān)控工具,出來已經(jīng)有十幾年,應(yīng)該算很成熟了,下面介紹p6spy的使用。
1.引入maven依賴,當(dāng)前最新版本3.8.3
p6spy p6spy 3.8.3
2.實(shí)現(xiàn)監(jiān)控類
只要實(shí)現(xiàn)如下的接口類則可,logSQL方法已經(jīng)可以獲取必要的信息,實(shí)現(xiàn)類中直接使用就好。
package com.p6spy.engine.spy.appender; import com.p6spy.engine.logging.Category; public interface P6Logger { /** * Logs the {@code SQL}. * * @param connectionId * connection identifier. * @param now * current time. * @param elapsed * @param category * the category to be used for logging. * @param prepared * the prepared statement to be logged. * @param sql * the {@code SQL} to be logged. * @param url * the database url where the sql statement executed */ public void logSQL(int connectionId, String now, long elapsed, Category category, String prepared, String sql, String url); /** * Logs the stacktrace of the exception. * * @param e * exception holding the stacktrace to be logged. */ public void logException(Exception e); /** * Logs the text. * * @param text * to be logged */ public void logText(String text); /** * @param category * the category to be evaluated. * @return {@code true} if category is enabled. Otherwise returns * {@code false} */ public boolean isCategoryEnabled(Category category); }
3.配置
將p6spy項(xiàng)目下p6spy/src/main/assembly/individualFiles/spy.properties文件放到resources目錄下或者classpath中,找到appender將類名修改為你自己的實(shí)現(xiàn)類,并去掉#:
#appender=com.p6spy.engine.spy.appender.FileLogger
其他所有配置都不用修改就可以監(jiān)控到SQL。
4.修改Spring的配置
1) jdbc.driver 替換為 com.p6spy.engine.spy.P6SpyDriver
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
2) jdbc.url 替換為 jdbc:p6spy:mysql:/xxx
spring.datasource.url=jdbc:p6spy:mysql://XXX
XXX部分自行替換。至此,可以監(jiān)控到SQL語句了。
p6spy項(xiàng)目地址: https://github.com/p6spy/p6spy
end.
加入《Java棧實(shí)戰(zhàn)營》知識星球,參與討論,更多實(shí)戰(zhàn)代碼分享,不就是幾斤蘋果,幾個(gè)榮耀道具的事嗎!
https://t.zsxq.com/RNzfi2j
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75810.html
摘要:微服務(wù)中調(diào)用棧的獲取,使用的開發(fā)者會很自然想到用來攔截,但是攔截同一個(gè)類的多個(gè)方法之間的調(diào)用很不方便,有侵入性,因此并不適合。調(diào)用棧的跟蹤也提供了這個(gè)能力,可以獲得當(dāng)前方法的調(diào)用棧信息。 一、調(diào)用鏈跟蹤的作用 調(diào)用鏈跟蹤包括 1.前端到后端的調(diào)用鏈 2.單個(gè)服務(wù)內(nèi)部方法之間的調(diào)用鏈 3.微服務(wù)之間的調(diào)用鏈 4.應(yīng)用服務(wù)和數(shù)據(jù)庫之間的調(diào)用鏈 5.應(yīng)用服務(wù)和第三方服務(wù)中...
摘要:頁面展示的統(tǒng)計(jì)追蹤等信息則通過的接口獲取四功能展示數(shù)據(jù)庫監(jiān)控目前已實(shí)現(xiàn)的功能有分類統(tǒng)計(jì)數(shù)據(jù)庫連接池監(jiān)控慢耗時(shí)分布統(tǒng)計(jì)慢統(tǒng)計(jì)慢追蹤以及調(diào)用鏈日志關(guān)聯(lián)功能。 作者: 王林林 出處:UAVStack智能運(yùn)維 來源:宜信技術(shù)學(xué)院技術(shù)沙龍001期|AI中臺:一種敏捷的智能業(yè)務(wù)支持方案|宜信技術(shù)沙龍 3月28日晚8點(diǎn)線上直播,點(diǎn)擊報(bào)名 UAVStack是一個(gè)全維監(jiān)控與應(yīng)用運(yùn)維平臺。UAV.Mon...
摘要:除了以上級別的成員變量共享,在調(diào)用鏈跟蹤時(shí)要能識別不同分層下的多個(gè)類實(shí)例的調(diào)用是同一個(gè)請求,而這個(gè)請求的調(diào)用都在一個(gè)獨(dú)立線程內(nèi)完成,此時(shí)就要用到線程級變量共享。 一、Java類成員作用域 JAVA類成員作用域參考下圖: showImg(https://segmentfault.com/img/bVbvWlh?w=1695&h=925); Java虛擬機(jī)級作用域,通過在類成員變量前加...
摘要:一調(diào)用棧調(diào)用鏈監(jiān)控僅僅獲取調(diào)用順序是不夠的,如前所描述左邊只體現(xiàn)了順序,右邊體現(xiàn)了順序和調(diào)用棧信息。二獲取調(diào)用棧在中獲取調(diào)用棧的方法如下代碼示例輸出結(jié)果可以看到第個(gè)棧是調(diào)用的方法。 一、調(diào)用棧 調(diào)用鏈監(jiān)控僅僅獲取調(diào)用順序是不夠的,如前所描述: showImg(https://segmentfault.com/img/bVbvV9H?w=500&h=230);左邊只體現(xiàn)了順序,右邊體現(xiàn)...
閱讀 3286·2021-11-24 09:38
閱讀 2158·2021-11-23 09:51
閱讀 1750·2021-10-13 09:39
閱讀 2624·2021-09-23 11:53
閱讀 1408·2021-09-02 15:40
閱讀 3660·2019-08-30 15:54
閱讀 1135·2019-08-30 13:04
閱讀 2566·2019-08-30 11:01