SpringBoot集成P6Spy的實現(xiàn)示例
本節(jié)目標
- 實現(xiàn)Mybatis Plus + P6Spy 進行sqly語句輸出
- 實現(xiàn)Mybatis Plus + P6Spy 進行sql執(zhí)行耗時輸出
P6Spy簡介
p6spy 是一個可以用來在應用程序中攔截和修改數(shù)據(jù)操作語句的開源框架。通常使用它來跟蹤數(shù)據(jù)庫操作,查看程序運行過程中執(zhí)行的sql語句。簡單來說,就是對 SQL 語句執(zhí)行過程的監(jiān)控。我們一般用來做兩件事情:
- 打印完整的sql語句
- sql語句的耗時
官網(wǎng)地址:p6spy.readthedocs.io/en/latest/
拋出問題
首先來看一下 Mybaties-plus 的默認輸出:
==> 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 語句,甚至還想要看到每條 sql 語句的總耗時。這個時候,p6spy 就發(fā)揮出它的作用了。
集成P6Spy
參照gitee.com/mayuanfei/S…下的springboot04項目創(chuàng)建springboot05項目。然后在其基礎(chǔ)上進行修改。
1. SpringBoot三板斧之加入依賴
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
2. 修改數(shù)據(jù)庫鏈接配置
- 替換你的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的配置 # 應用的攔截模塊 modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory # 自定義日志打印 logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger # 日志輸出到控制臺 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 # 實際驅(qū)動 可多個 driverlist=com.mysql.cj.jdbc.Driver # 是否開啟慢SQL記錄 outagedetection=true # 慢SQL記錄標準 2 秒 outagedetectioninterval=2 # 是否過濾 Log filter=true # 過濾 Log 時所排除的 sql 關(guān)鍵字,以逗號分隔 exclude=select 1 from dual
4. 執(zhí)行上節(jié)中的測試
@Test
public void testSelect() {
List<SysUser> users = new LambdaQueryChainWrapper<>(this.sysUserMapper)
.eq(SysUser::getUserId, 4L)
.like(SysUser::getUserName, "馬")
.list();
Console.log("users -> {}", users);
}
這里能看到執(zhí)行用時和具體的sql語句如下:
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運行的用時
到此這篇關(guān)于SpringBoot集成P6Spy的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot集成P6Spy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Springboot websocket使用案例詳解
這篇文章主要介紹了Java Springboot websocket使用案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09
java實現(xiàn)切割wav音頻文件的方法詳解【附外部jar包下載】
這篇文章主要介紹了java實現(xiàn)切割wav音頻文件的方法,結(jié)合實例形式詳細分析了java切割wav音頻文件的相關(guān)原理、操作技巧與注意事項,并附帶外部jar包供讀者下載,需要的朋友可以參考下2019-05-05
Spring MessageSource獲取消息不符合預期的問題解決方案
最近我參與的產(chǎn)品要做國際化支持,選擇了用Spring MessageSource來實現(xiàn),這個Spring 框架提供的工具使用很簡單,網(wǎng)上有各種教程文章,這里不做贅述,只說一個實際遇到的問題及解決方案,需要的朋友可以參考下2024-01-01
MyBatis中的XML實現(xiàn)和動態(tài)SQL實現(xiàn)示例詳解
這篇文章主要介紹了MyBatis中的XML實現(xiàn)和動態(tài)SQL實現(xiàn),我們可以將XML中重復出現(xiàn)的內(nèi)容提取出來放到sql標簽中,當需要用到sql標簽中的內(nèi)容時,用include標簽將sql標簽中的內(nèi)容引進來即可,感興趣的朋友跟隨小編一起看看吧2024-02-02
Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in)
這篇文章主要介紹了Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

