当前位置: 首页 > news >正文

项目拓展-简易SQL监控,P6SPY拦截所有jdbc连接并打印执行SQL

介绍一下P6spy驱动

p6spy 是一款开源的数据库监控框架,主要用于 拦截和记录应用程序与数据库之间的所有交互(如 SQL 语句、参数、执行时间等)

它通过包装现有的 JDBC 驱动(如 MySQL JDBC 驱动),在不修改业务代码的情况下,实现对数据库操作的透明监控和分析。


p6spy 和普通 MySQL 驱动的区别

特性

普通 MySQL 驱动(如 mysql-connector-java

p6spy

核心功能

实现数据库通信协议,执行 SQL 并返回结果。

拦截和增强现有 JDBC 驱动的功能,记录 SQL 操作

日志能力

仅支持基础日志(需手动配置,功能有限)。

提供详细的 SQL 日志(含参数、执行时间、调用栈)。

代码侵入性

无侵入,直接使用原生驱动。

无侵入,通过配置替换原生驱动为 p6spy 驱动。

性能开销

低,仅处理数据库通信。

有一定开销(额外拦截和日志记录)。

适用场景

生产环境直接操作数据库。

开发/测试环境调试、性能优化、审计。


p6spy 的核心价值

透明监控

无需修改代码,通过配置即可捕获所有 SQL 操作

记录完整的 SQL 语句(含动态参数)、执行时间、连接信息等

调试与优化

快速定位慢查询(通过执行时间分析)。

验证 SQL 参数是否正确绑定(避免 SQL 注入或逻辑错误)

日志增强

支持格式化输出(如 JSON、SQL 美化)

可集成日志框架(如 Log4j、SLF4J)


P6spy使用快速入门

依赖

<dependency><groupId>com.github.klboke</groupId><artifactId>p6spy-spring-boot-starter</artifactId><version>1.0</version>
</dependency>

配置文件

application.yml

指定依赖:com.p6spy.engine.spy.P6SpyDriver

spring:application:name: Kira-Test  # 注意:YAML中使用冒号(:)而非等号(=)datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:mysql://127.0.0.1/mytestusername: rootpassword: 123456hikari:minimum-idle: 5            # 最小空闲连接数maximum-pool-size: 20      # 最大连接数idle-timeout: 60000        # 空闲连接超时时间(ms)max-lifetime: 1800000      # 连接最大存活时间(ms)connection-timeout: 20000  # 连接超时时间(ms)validation-timeout: 5000   # 验证查询超时时间(ms)leak-detection-threshold: 2000 # 连接泄漏检测阈值(ms)logging:level:com.p6spy: DEBUGp6spy: DEBUG

spy.properties

p6spy的配置文件

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime)| SQL耗时:%(executionTime) ms | 连接%(connectionId) | 执行的SQL语句:%(category) %(sql)appender=com.p6spy.engine.spy.appender.StdoutLoggerexcludecategories=info,debug,result,batc,resultsetderegisterdrivers=truedateformat=yyyy-MM-dd HH:mm:ssdriverlist=com.p6spy.engine.spy.P6SpyDriveroutagedetection=trueoutagedetectioninterval=2

控制台输出的sql细节

2025-04-11 11:23:44| SQL耗时:6 ms | 连接0 | 执行的SQL语句:statement insert into t_pha_trade (json_test) VALUES ('[{"installAdsNum":3,"retentionDuration":"30","retentionStrategy":"0.6,0.52,0.5"},{"installAdsNum":5,"retentionDuration":"45","retentionStrategy":"0.7,0.6,0.55,0.5"},{"installAdsNum":2,"retentionDuration":"20","retentionStrategy":"0.5,0.45"}]')

相关文章:

  • 第1章 C# 和 .NET 框架 笔记
  • 【知识图谱构建系列3】zero-shot的理念介绍
  • Android xml的Preference设置visibility=“gone“ 无效分析解决
  • 【无标题】【2025年软考中级】第三章数据结构3.2 栈与队列
  • LeetCode - 69. x 的平方根
  • 数据结构 学习 链表 2025年6月14日08点01分
  • 力扣Hot100每日N题(15~16)
  • sqli-labs靶场46-53关(综合)
  • 拆解 CMS/G1/ZGC 三种垃圾回收器算法过程
  • Python实战应用-Python操作MySQL数据库
  • leetcode2-两数相加
  • 【CF】Day84——Codeforces Round 862 (Div. 2) D (⭐树的直径的性质 + DFS找树的直径)
  • K8S中使用英伟达GPU
  • 在 CentOS中安装Docker并安装青龙脚本——笔记
  • Vue3 实现老虎机抽奖游戏
  • Spring AI Alibaba Graph 实践
  • 【AD笔记】嘉立创元件导入到AD中(原理图-pcd-3D模型)
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程ES(四)查询、排序、分页、高亮
  • DBAPI如何实现API编排
  • Excel大厂自动化报表实战(互联网金融-数据分析周报制作下)
  • 平湖网站制作/产品网络营销策划方案
  • 前端做项目的网站资源/外包网络推广公司怎么选
  • 绍兴高端网站设计/百度图片搜索网页版
  • 房地产设计公司/seo推广服务
  • 连云港做网站建设/优化营商环境心得体会
  • 旧宫做网站的公司/排名检测