当前位置: 首页 > 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"}]')
http://www.xdnf.cn/news/1030897.html

相关文章:

  • 三维重建 —— 4. 三维重建基础与极几何
  • LeetCode 第73题:矩阵置零
  • 区块链与人工智能的融合:从信任到智能的IT新引擎
  • JUC核心解析系列(五)——执行框架(Executor Framework)深度解析
  • ELK 日志分析系统深度解析与实战指南
  • 使用预训练卷积神经模型进行分类(MATLAB例)
  • MaxCompute的Logview分析详解
  • 仿飞书部门选择器
  • 二维码识别深度解析
  • 大模型笔记1:大致了解大模型
  • Burgers方程初值问题解的有效区域
  • JVM 参数调优核心原则与常用参数
  • 【无标题】在 4K 高分辨率(如 3840×2160)笔记本上运行 VMware 虚拟机时平面太小字体太小(ubuntu)
  • 如何在 ArcGIS 中使用 Microsoft Excel 文件_20250614
  • 【软测】node.js辅助生成测试报告
  • 写作词汇积累(A):颇有微词、微妙(“微”字的学习理解)
  • Veeam Backup Replication系统的安装与使用
  • ABP vNext 多语言与本地化:动态切换、资源继承与热更新
  • webuploader分片上传示例,服务端上传文件到腾讯云CDN Teo 应用示例
  • React 第三方状态管理库的比较与选择
  • 后端通过nignx代理转发,提供接口供前端在防火墙外访问
  • 计算机网络-自顶向下—第一章概述重点复习笔记
  • AI应用:计算机视觉相关技术总结
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程ES(四)查询、排序、分页、高亮
  • 打卡Day53
  • 2025虚幻5蓝图编辑器的细节面板调不出来
  • MySQL-DQL数据查询语句深度解析与实战指南
  • 使用docker中的ollama
  • Python实战应用-Python操作MySQL数据库
  • 雪豹速清APP:高效清理,畅享流畅手机体验