springboot使用p6spy打印完整SQL

本文介绍了如何在SpringBoot应用中使用P6Spy来打印完整的SQL语句,以解决ORM框架默认日志打印占位符的问题。通过引入P6Spy依赖,更改数据库驱动和URL,配置spy.properties文件以及自定义日志格式,最终能够实现清晰的SQL执行日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在使用orm框架时,一般默认提供的日志打印方式打印出来的sql中间的占位符并没有被替换掉:
例如mybatis:
使用日志打印

logging.level.com.wk.entity.dao=debug
2018-07-14 14:38:39.497 DEBUG 4088 --- [nio-8082-exec-1] c.k.e.e.d.A.selectByPrimaryKey           : ==>  Preparing: select id, score from a_innodb_test where id = ? 
2018-07-14 14:38:39.520 DEBUG 4088 --- [nio-8082-exec-1] c.k.e.e.d.A.selectByPrimaryKey           : ==> Parameters: 1(Integer)

打印出来的sql带有占位符,并不利于调试。

P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首 页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy 分发包包括P6Log,它是一 个可记录任何 Java 应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。
使用p6spy我们可以直接查看到数据库执行的sql而不是预编译带?的SQL。

首先我们导入p6spy的依赖:

    // https://mvnrepository.com/artifact/p6spy/p6spy
    compile group: 'p6spy', name: 'p6spy', version: '3.7.0'

然后修改数据库连接驱动和url:

spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/test

数据库驱动将com.mysql.jdbc.Driver替换为com.p6spy.engine.spy.P6SpyDriver,然后在url中的按上面的格式加入p6spy即可。
再在资源目录下加入spy.properties配置文件,内容如下:

###
# #%L
# P6Spy
# %%
# Copyright (C) 2013 P6Spy
# %%
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# #L%
###
#################################################################
# P6Spy Options File                                            #
# See documentation for detailed instructions                   #
# http://p6spy.github.io/p6spy/2.0/configandusage.html     
<think>好的,我现在需要帮助用户解决如何在Spring Boot项目中整合P6Spy的问题。首先,我得回顾用户提供的引用内容,看看有哪些信息可以利用。用户引用了四个资料,都是关于Spring Boot集成P6Spy的步骤和配置。我需要把这些信息整理成一个清晰的教程,同时确保符合用户提到的系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,用户的需求是整合P6Spy进行SQL监控,所以需要涵盖依赖添加、配置修改、日志格式设置以及可能的优化实践。根据引用内容,依赖的版本都是3.9.1,所以应该统一使用这个版本。然后,配置方面,驱动类需要改为P6SpyDriver,URL需要加上p6spy前缀。这里需要注意不同数据库的配置示例,比如MySQL和H2,用户提供的引用中有提到这两种,可能需要分别说明。 接下来,配置spy.properties文件的部分,引用中有提到不同的配置项,比如日志格式、输出文件、过滤等。需要把这些配置项整理出来,并解释每个参数的作用。比如logMessageFormat和appender的选择,可以影响日志的输出形式和存储位置。 然后,用户可能需要验证配置是否成功,所以需要指导如何通过查看日志文件或控制台输出来确认。此外,最佳实践部分需要考虑生产环境和开发环境的配置差异,比如是否启用多线程或批量操作的支持,避免性能问题。 还需要注意用户提到的系统指令,比如所有行内数学表达式要用$...$,不过这个问题可能不涉及数学公式,但需要检查是否有变量或代码块需要正确格式化。另外,生成相关问题的时候,要确保问题相关且有价值,比如性能优化、日志分析工具、配置参数作用等。 可能还需要考虑用户是否在使用MyBatis或Hibernate,因为不同的ORM工具可能需要不同的配置,但根据引用内容,用户提供的例子中提到了MyBatis-Plus的配置,所以可能需要说明与MyBatis的集成注意事项。 最后,确保回答结构清晰,分步骤说明,每个部分有明确的标题,代码块正确使用格式,配置示例准确,并且引用标识正确添加到对应的步骤后面,比如引用[^1]到[^4]的位置。同时,生成的相关问题要覆盖用户可能进一步关心的方面,比如性能影响、高级配置、日志工具整合等。 现在需要把这些思考整理成一个连贯的回答,确保符合用户的要求,同时语言自然,步骤明确,参考引用正确。</think>### Spring Boot整合P6Spy配置教程 #### 一、添加依赖 在`pom.xml`中添加P6Spy依赖(推荐版本3.9.1): ```xml <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.1</version> </dependency> ``` 版本需与JDK及Spring Boot版本兼容[^3]。 #### 二、修改数据源配置 在`application.yml`中替换原数据库驱动: ```yaml spring: datasource: driver-class-name: com.p6spy.engine.spy.P6SpyDriver # P6Spy驱动类 url: jdbc:p6spy:mysql://localhost:3306/dbname # 添加p6spy前缀 username: root password: 123456 ``` MySQL示例需保留原始JDBC URL参数[^4],H2内存数据库配置为`jdbc:p6spy:h2:mem:testdb`[^2]。 #### 三、配置spy.properties 在`resources`目录下创建`spy.properties`: ```properties # 日志输出格式(支持自定义) logMessageFormat=com.p6spy.engine.logging.appender.MultiLineFormat # 日志输出目标(文件/控制台) appender=com.p6spy.engine.spy.appender.FileLogger logfile=p6spy.log # 日志文件路径 # 日期格式 dateformat=yyyy-MM-dd HH:mm:ss.SSS # 过滤监控的SQL类型(select|update|delete等) filter=true # 包含数据库操作类型 include=true ``` 支持通过`exclude`参数排除不需要监控的表[^1]。 #### 四、验证配置 启动应用后观察: 1. 控制台输出完整SQL语句(包含参数和耗时) 2. 项目根目录生成`p6spy.log`文件 3. 日志条目示例: ``` 2023-09-01 14:30:22.456 | took 5ms | statement=SELECT * FROM user WHERE id=1 ``` #### 五、最佳实践 1. **生产环境优化**: ```properties # 关闭堆栈跟踪(提升性能) stacktrace=false # 启用批量操作支持 databaseDialectDateFormat=yyyy-MM-dd ``` 2. **日志分析**: - 使用`logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat`自定义输出 - 集成Logstash或ELK进行日志分析 3. **性能监控**: ```properties # 统计SQL执行时间分布 executionThreshold=10 # 记录超过10ms的查询 ``` ### 注意事项 1. 与MyBatis-Plus整合时需保留原有日志配置[^4] 2. 开发环境建议启用`appender=com.p6spy.engine.spy.appender.Slf4JLogger`与SLF4J集成[^2] 3. 多数据源场景需为每个数据源单独配置P6Spy驱动
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值