SpringBoot集成P6Spy的实现示例

 更新时间:2025年08月12日 08:30:29   作者:老马9527  
本文主要介绍了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中==与equals的区别对比

    详细讲解Java中==与equals的区别对比

    这篇文章主要为大家详细介绍了Java中==与equals的区别对比,文中有详细的代码示例供大家参考,具有一定的参考价值,感兴趣的同学可以参考阅读下
    2023-09-09
  • Jenkins一键打包部署SpringBoot应用的方法步骤

    Jenkins一键打包部署SpringBoot应用的方法步骤

    本文主要介绍了使用Jenkins一键打包部署SpringBoot应用的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java使用ArrayList实现扑克牌的示例代码

    Java使用ArrayList实现扑克牌的示例代码

    学习了关于集合类的知识,我们可以做一个小项目来加深对集合类知识的学习!本文就来利用ArrayList实现扑克牌发牌洗牌效果,需要的可以参考一下
    2022-10-10
  • SpringBoot+Redis实现不重复消费的队列的示例代码

    SpringBoot+Redis实现不重复消费的队列的示例代码

    本文主要介绍了SpringBoot+Redis实现不重复消费的队列的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • IDEA中Spring项目的工程构建

    IDEA中Spring项目的工程构建

    这篇文章主要介绍了IDEA中Spring项目的工程构建,Spring框架是轻量级的JavaEE框架,可以解决企业应用开发的复杂性,有两个核心部分:IOC和Aop,今天来学习如何构建spring项目,需要的朋友可以参考下
    2023-05-05
  • Java日常练习题,每天进步一点点(41)

    Java日常练习题,每天进步一点点(41)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 关于Springboot中JSCH的使用及说明

    关于Springboot中JSCH的使用及说明

    这篇文章主要介绍了关于Springboot中JSCH的使用及说明,具有很好的参考价值,希望对大家有所帮助。
    2022-09-09
  • SpringMVC 响应数据和结果视图从环境搭建到实战全解析

    SpringMVC 响应数据和结果视图从环境搭建到实战全解析

    SpringMVC中,Controller方法的返回值决定了响应方式,本文详细讲解了SpringMVC的开发环境搭建、Controller方法返回值分类、转发与重定向机制,以及JSON异步交互的实现,本文介绍SpringMVC 响应数据和结果视图从环境搭建到实战全解析,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Java集合框架源码分析之LinkedHashMap详解

    Java集合框架源码分析之LinkedHashMap详解

    这篇文章主要介绍了Java集合框架源码分析之LinkedHashMap详解,内容包括了linkedhashmap的简介和源码剖析以及关于LinkedHashMap的源码总结,内容丰富,需要的朋友可以参考下。
    2017-09-09
  • java实现联机五子棋

    java实现联机五子棋

    这篇文章主要为大家详细介绍了java实现联机五子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论