SpringBoot集成P6Spy的實(shí)現(xiàn)示例
本節(jié)目標(biāo)
- 實(shí)現(xiàn)Mybatis Plus + P6Spy 進(jìn)行sqly語(yǔ)句輸出
- 實(shí)現(xiàn)Mybatis Plus + P6Spy 進(jìn)行sql執(zhí)行耗時(shí)輸出
P6Spy簡(jiǎn)介
p6spy 是一個(gè)可以用來(lái)在應(yīng)用程序中攔截和修改數(shù)據(jù)操作語(yǔ)句的開(kāi)源框架。通常使用它來(lái)跟蹤數(shù)據(jù)庫(kù)操作,查看程序運(yùn)行過(guò)程中執(zhí)行的sql語(yǔ)句。簡(jiǎn)單來(lái)說(shuō),就是對(duì) SQL 語(yǔ)句執(zhí)行過(guò)程的監(jiān)控。我們一般用來(lái)做兩件事情:
- 打印完整的sql語(yǔ)句
- sql語(yǔ)句的耗時(shí)
官網(wǎng)地址:p6spy.readthedocs.io/en/latest/
拋出問(wèn)題
首先來(lái)看一下 Mybaties-plus 的默認(rèn)輸出:
==> Preparing: SELECT user_id,dept_id,user_name,nick_name,email,phonenumber,sex,avatar,password,status,del_flag,create_time,create_by,update_time,update_by FROM sys_user WHERE del_flag=0 AND (user_id = ? AND user_name LIKE ?) ==> Parameters: 4(Long), %馬%(String)
我們期望的是打印出一條完整的 sql 語(yǔ)句,甚至還想要看到每條 sql 語(yǔ)句的總耗時(shí)。這個(gè)時(shí)候,p6spy 就發(fā)揮出它的作用了。
集成P6Spy
參照gitee.com/mayuanfei/S…下的springboot04項(xiàng)目創(chuàng)建springboot05項(xiàng)目。然后在其基礎(chǔ)上進(jìn)行修改。
1. SpringBoot三板斧之加入依賴
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
2. 修改數(shù)據(jù)庫(kù)鏈接配置
- 替換你的JDBC Driver為com.p6spy.engine.spy.P6SpyDriver;
- 修改JDBC Url為jdbc:p6spy:xxxx。
application-dev中的配置修改前:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://101.43.67.114:3306/springboot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 23456
修改后:

3. 添加配置文件 spy.properties
在resources目錄下創(chuàng)建spy.properties屬性文件,內(nèi)容如下:
# P6Spy的配置 # 應(yīng)用的攔截模塊 modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory # 自定義日志打印 logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger # 日志輸出到控制臺(tái) appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger # 使用日志系統(tǒng)記錄 sql #appender=com.p6spy.engine.spy.appender.Slf4JLogger # 設(shè)置 p6spy driver 代理 deregisterdrivers=true # 取消JDBC URL前綴 useprefix=true # 配置記錄 Log 例外,可去掉的結(jié)果集有error,info,batch,debug,statement,commit,rollback,result,resultset. excludecategories=info,debug,result,commit,resultset # 日期格式 dateformat=yyyy-MM-dd HH:mm:ss # 實(shí)際驅(qū)動(dòng) 可多個(gè) driverlist=com.mysql.cj.jdbc.Driver # 是否開(kāi)啟慢SQL記錄 outagedetection=true # 慢SQL記錄標(biāo)準(zhǔn) 2 秒 outagedetectioninterval=2 # 是否過(guò)濾 Log filter=true # 過(guò)濾 Log 時(shí)所排除的 sql 關(guān)鍵字,以逗號(hào)分隔 exclude=select 1 from dual
4. 執(zhí)行上節(jié)中的測(cè)試
@Test
public void testSelect() {
List<SysUser> users = new LambdaQueryChainWrapper<>(this.sysUserMapper)
.eq(SysUser::getUserId, 4L)
.like(SysUser::getUserName, "馬")
.list();
Console.log("users -> {}", users);
}
這里能看到執(zhí)行用時(shí)和具體的sql語(yǔ)句如下:
Consume Time:29 ms 2023-05-24 15:34:44 Execute SQL:SELECT user_id,dept_id,user_name,nick_name,email,phonenumber,sex,avatar,password,status,del_flag,create_time,create_by,update_time,update_by FROM sys_user WHERE del_flag=0 AND (user_id = 4 AND user_name LIKE '%馬%')
代碼地址
https://gitee.com/mayuanfei/SpringBootDemo下的springboot05
記憶印記
- p6spy能打印出完成的sql
- p6spy能打印出sql運(yùn)行的用時(shí)
到此這篇關(guān)于SpringBoot集成P6Spy的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot集成P6Spy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis入門(mén)學(xué)習(xí)教程(一)-MyBatis快速入門(mén)
MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架,這篇文章主要給大家分享MyBatis入門(mén)學(xué)習(xí)教程(一)-MyBatis快速入門(mén),需要的朋友可以參考下2015-08-08
Java探索之Hibernate主鍵生成策略詳細(xì)介紹
這篇文章主要介紹了Java探索之Hibernate主鍵生成策略詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Java Springboot websocket使用案例詳解
這篇文章主要介紹了Java Springboot websocket使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
java實(shí)現(xiàn)切割wav音頻文件的方法詳解【附外部jar包下載】
這篇文章主要介紹了java實(shí)現(xiàn)切割wav音頻文件的方法,結(jié)合實(shí)例形式詳細(xì)分析了java切割wav音頻文件的相關(guān)原理、操作技巧與注意事項(xiàng),并附帶外部jar包供讀者下載,需要的朋友可以參考下2019-05-05
Java線程池必知必會(huì)知識(shí)點(diǎn)總結(jié)
這篇文章主要給大家介紹了關(guān)于Java線程池必知必會(huì)知識(shí)點(diǎn)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02
Spring MessageSource獲取消息不符合預(yù)期的問(wèn)題解決方案
最近我參與的產(chǎn)品要做國(guó)際化支持,選擇了用Spring MessageSource來(lái)實(shí)現(xiàn),這個(gè)Spring 框架提供的工具使用很簡(jiǎn)單,網(wǎng)上有各種教程文章,這里不做贅述,只說(shuō)一個(gè)實(shí)際遇到的問(wèn)題及解決方案,需要的朋友可以參考下2024-01-01
MyBatis中的XML實(shí)現(xiàn)和動(dòng)態(tài)SQL實(shí)現(xiàn)示例詳解
這篇文章主要介紹了MyBatis中的XML實(shí)現(xiàn)和動(dòng)態(tài)SQL實(shí)現(xiàn),我們可以將XML中重復(fù)出現(xiàn)的內(nèi)容提取出來(lái)放到sql標(biāo)簽中,當(dāng)需要用到sql標(biāo)簽中的內(nèi)容時(shí),用include標(biāo)簽將sql標(biāo)簽中的內(nèi)容引進(jìn)來(lái)即可,感興趣的朋友跟隨小編一起看看吧2024-02-02
Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in)
這篇文章主要介紹了Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

