成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java調(diào)用鏈跟蹤關(guān)鍵技術(shù)(四)SQL監(jiān)控

?xiaoxiao, / 1830人閱讀

摘要:一監(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)控工具p6spy

p6spy是一款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

相關(guān)文章

  • Java調(diào)用跟蹤關(guān)鍵技術(shù)(一)總體介紹

    摘要:微服務(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ù)中...

    gaara 評論0 收藏0
  • UAVStack的慢SQL數(shù)據(jù)庫監(jiān)控功能及其實(shí)現(xiàn)

    摘要:頁面展示的統(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...

    luodongseu 評論0 收藏0
  • Java調(diào)用跟蹤關(guān)鍵技術(shù)(三)線程變量

    摘要:除了以上級別的成員變量共享,在調(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ī)級作用域,通過在類成員變量前加...

    ThreeWords 評論0 收藏0
  • Java調(diào)用跟蹤關(guān)鍵技術(shù)(五)獲取調(diào)用

    摘要:一調(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)...

    VPointer 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<