SpringBoot集成P6Spy的实现示例
本节目标
- 实现Mybatis Plus + P6Spy 进行sqly语句输出
- 实现Mybatis Plus + P6Spy 进行sql执行耗时输出
P6Spy简介
p6spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通常使用它来跟踪数据库操作,查看程序运行过程中执行的sql语句。简单来说,就是对 SQL 语句执行过程的监控。我们一般用来做两件事情:
- 打印完整的sql语句
- sql语句的耗时
官网地址: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 就发挥出它的作用了。
集成P6Spy
参照gitee.com/mayuanfei/S…下的springboot04项目创建springboot05项目。然后在其基础上进行修改。
1. SpringBoot三板斧之加入依赖
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
2. 修改数据库链接配置
- 替换你的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目录下创建spy.properties属性文件,内容如下:
# 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 # 使用日志系统记录 sql #appender=com.p6spy.engine.spy.appender.Slf4JLogger # 设置 p6spy driver 代理 deregisterdrivers=true # 取消JDBC URL前缀 useprefix=true # 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. excludecategories=info,debug,result,commit,resultset # 日期格式 dateformat=yyyy-MM-dd HH:mm:ss # 实际驱动 可多个 driverlist=com.mysql.cj.jdbc.Driver # 是否开启慢SQL记录 outagedetection=true # 慢SQL记录标准 2 秒 outagedetectioninterval=2 # 是否过滤 Log filter=true # 过滤 Log 时所排除的 sql 关键字,以逗号分隔 exclude=select 1 from dual
4. 执行上节中的测试
@Test
public void testSelect() {
List<SysUser> users = new LambdaQueryChainWrapper<>(this.sysUserMapper)
.eq(SysUser::getUserId, 4L)
.like(SysUser::getUserName, "马")
.list();
Console.log("users -> {}", users);
}
这里能看到执行用时和具体的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运行的用时
到此这篇关于SpringBoot集成P6Spy的实现示例的文章就介绍到这了,更多相关SpringBoot集成P6Spy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java Springboot websocket使用案例详解
这篇文章主要介绍了Java Springboot websocket使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-09-09
java实现切割wav音频文件的方法详解【附外部jar包下载】
这篇文章主要介绍了java实现切割wav音频文件的方法,结合实例形式详细分析了java切割wav音频文件的相关原理、操作技巧与注意事项,并附带外部jar包供读者下载,需要的朋友可以参考下2019-05-05
Spring MessageSource获取消息不符合预期的问题解决方案
最近我参与的产品要做国际化支持,选择了用Spring MessageSource来实现,这个Spring 框架提供的工具使用很简单,网上有各种教程文章,这里不做赘述,只说一个实际遇到的问题及解决方案,需要的朋友可以参考下2024-01-01


最新评论