SpringBoot集成P6Spy监控SQL执行耗时的详细步骤

 更新时间:2025年07月08日 08:57:47   作者:学亮编程手记  
P6Spy 是一款开源的 Java 框架,是一个强大的数据库监控工具,可以帮助开发者监控并分析应用程序与数据库之间的交互行为,本文给大家介绍了SpringBoot集成P6Spy监控SQL执行耗时的详细步骤,需要的朋友可以参考下

SpringBoot集成P6Spy监控SQL耗时

P6Spy是一个开源的SQL监控工具,可以拦截并记录应用程序中所有的SQL语句及其执行时间。下面是SpringBoot集成P6Spy的详细步骤:

1. 添加依赖

pom.xml中添加P6Spy依赖:

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version> <!-- 使用最新版本 -->
</dependency>

2. 配置数据源

修改你的数据源配置,将原来的JDBC驱动替换为P6Spy的驱动:

# application.properties 配置示例
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver

3. 添加spy.properties配置文件

src/main/resources目录下创建spy.properties文件:

# 真实JDBC驱动
driverlist=com.mysql.cj.jdbc.Driver

# 是否自动刷新日志
autoflush=true

# 日志输出方式,可以是file/sysout/slf4j
appender=sysout

# 日志格式
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime) | %(executionTime)ms | %(category) | connection %(connectionId) | %(sqlSingleLine)

# 记录过滤,可以设置只记录超过特定时间的SQL
filter=true
exclude=QCache,Quartz

4. 高级配置(可选)

4.1 日志输出到文件

appender=file
logfile=spy.log

4.2 使用SLF4J输出日志

appender=slf4j

4.3 只记录超过特定时间的SQL

executionThreshold=100  # 只记录执行时间超过100ms的SQL

4.4 格式化SQL语句

logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat

5. 示例输出

配置完成后,控制台会输出类似以下格式的SQL日志:

2023-08-01 14:30:45 | 12ms | statement | connection 1 | select * from user where id = 1
2023-08-01 14:30:46 | 45ms | statement | connection 1 | update user set name = 'test' where id = 1

6. 注意事项

  1. 生产环境建议不要使用sysout方式输出日志,可以使用fileslf4j
  2. 对于性能敏感的应用程序,P6Spy可能会带来轻微的性能开销
  3. 如果使用HikariCP等连接池,确保配置正确

7. 替代方案

如果只需要简单的SQL监控,也可以考虑:

  • Spring Boot自带的spring.jpa.show-sql=true
  • 使用HikariCP的leakDetectionThreshold配置
  • 使用Druid数据源的内置监控功能

到此这篇关于SpringBoot集成P6Spy监控SQL执行耗时的详细步骤的文章就介绍到这了,更多相关SpringBoot P6Spy监控SQL耗时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot如何实现Web系统License授权认证

    Springboot如何实现Web系统License授权认证

    这篇文章主要介绍了Springboot如何实现Web系统License授权认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

    Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

    这篇文章主要介绍了Java中日期时间转换的多种方法,包括将Date转换为LocalDateTime、LocalDate等,以及将时间戳转换为LocalDateTime,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • spring boot入门开始你的第一个应用

    spring boot入门开始你的第一个应用

    这篇文章主要介绍了spring boot入门开始你的第一个应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Spring Boot项目创建两种方式的全流程

    Spring Boot项目创建两种方式的全流程

    Spring Boot是一款基于Spring Framework的开源框架,用于快速构建独立的、可运行的、生产级的Spring应用程序,这篇文章主要介绍了Spring Boot项目创建两种方式的相关资料,需要的朋友可以参考下
    2025-09-09
  • MyBatisPlus实现自动填充字段的实践

    MyBatisPlus实现自动填充字段的实践

    MyBatis-Plus自动填充功能可以在插入或更新数据时自动填充字段,如创建时间和更新时间,本文就来详细的介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10
  • Maven忽略单元测试及打包到Nexus的实现

    Maven忽略单元测试及打包到Nexus的实现

    我们的工程在打包发布时候,通常都需要忽略单元测试,以免因环境原因,无法通过单元测试而影响发布,本文主要介绍了Maven忽略单元测试及打包到Nexus的实现,感兴趣的可以了解一下
    2024-04-04
  • Java元注解meta-annotation和依赖注入详解

    Java元注解meta-annotation和依赖注入详解

    这篇文章主要给大家介绍了关于Java元注解meta-annotation和依赖注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 基于dubbo分组group的一些总结

    基于dubbo分组group的一些总结

    这篇文章主要介绍了关于dubbo分组group的一些总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Springboot笔记之热部署及不生效的解决方案

    Springboot笔记之热部署及不生效的解决方案

    这篇文章主要介绍了Springboot笔记之热部署及不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • JAVA得到数组中最大值和最小值的简单实例

    JAVA得到数组中最大值和最小值的简单实例

    这篇文章主要介绍了JAVA得到数组中最大值和最小值的简单实例,需要的朋友可以参考下
    2014-08-08

最新评论