SpringBoot整合P6Spy实现全链路SQL监控

一、p6spy核心作用
  1. 完整SQL捕获:输出带实际参数的SQL语句,无需手动拼接

  2. 性能分析:精确记录每条SQL执行耗时

  3. 慢查询检测:支持阈值配置自动标记慢SQL(如 >2s)

  4. ORM调试:验证MyBatis等框架生成的SQL

二、集成步骤
  1. 添加依赖(关键依赖):

    复制代码
    <dependency>
        <groupId>p6spy</groupId>
        <artifactId>p6spy</artifactId>
        <version>3.9.1</version>
    </dependency>
    <!-- MyBatis Plus需额外添加 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-p6spy</artifactId>
    </dependency>
  2. 配置数据源(关键改动):

    复制代码
    spring:
      datasource:
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver # 替换驱动
        url: jdbc:p6spy:mysql://localhost:3306/db # URL添加p6spy前缀
  3. 创建日志格式化类(可选增强):

    复制代码
    public class CustomP6SpyLogger implements MessageFormattingStrategy {
        @Override
        public String formatMessage(...) {
            // 示例:添加ANSI颜色/格式化日期参数
            return String.format("\u001B[33m%s | 耗时:%dms | SQL:\u001B[32m%s\u001B[0m", 
                                 now, elapsed, formattedSql);
        }
    }
  4. 配置spy.properties(核心配置):

    复制代码
    # 日志输出方式
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    # 自定义格式化类
    logMessageFormat=com.example.CustomP6SpyLogger
    # 慢SQL检测(2秒阈值)
    outagedetection=true
    outagedetectioninterval=2
    # 排除无关日志
    excludecategories=info,debug,resultset
三、注意事项
  1. 版本兼容:MySQL 8.x需使用p6spy 3.9.x

  2. 性能损耗 :增加约5%-10%开销,生产环境建议:

    • 关闭常规监控

    • 仅启用慢查询检测

  3. 文件位置spy.properties必须放在src/main/resources

  4. 日志优化 :通过excludecategories过滤非SQL日志

四、效果演示

控制台输出示例:

复制代码
2023-05-01 12:30:45 | 耗时: 148ms | SQL: SELECT * FROM user WHERE create_time > '2023-01-01 00:00:00'

可直接拷贝SQL到数据库客户端执行

五、总结

p6spy解决了开发中的两大痛点:

  1. 直观获取完整SQL:摆脱参数占位符拼接

  2. 精准定位慢查询:通过耗时监控优化数据库性能 建议在开发/测试环境启用,生产环境按需使用慢查询监控功能。

相关推荐
想用offer打牌2 小时前
MCP (Model Context Protocol) 技术理解 - 第一篇
后端·aigc·mcp
千寻girling2 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
程序员清风2 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
lucky67072 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
何中应2 小时前
请求头设置没有生效
java·后端
NPE~2 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
Coder_Boy_2 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
宋小黑3 小时前
JDK 6到25 全版本网盘合集 (Windows + Mac + Linux)
java·后端
念何架构之路3 小时前
Go进阶之panic
开发语言·后端·golang
先跑起来再说3 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea