很好,我来详细解释如何使用 P6Spy 来打印完整的 SQL 语句。
步骤 1: 添加 P6Spy 依赖
在你的 Maven pom.xml
文件中添加以下依赖:
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
步骤 2: 修改数据源配置
在你的 application.properties
或 application.yml
文件中,修改数据源配置:
# 原来的配置
# spring.datasource.url=jdbc:mysql://localhost:3306/your_database
# spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 新的配置
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/your_database
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
注意 URL 中添加了 p6spy:
。
步骤 3: 创建 P6Spy 配置文件
在 src/main/resources
目录下创建 spy.properties
文件,内容如下:
# 使用Slf4J记录sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 自定义日志格式
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sql)
# 设置 P6Spy driver 代理
driverlist=com.mysql.cj.jdbc.Driver
# 是否开启慢 SQL 记录
outagedetection=true
# 慢 SQL 记录标准 2 秒
outagedetectioninterval=2
步骤 4: 配置日志级别(可选)
在 application.properties
中设置日志级别:
logging.level.p6spy=info
步骤 5: 重启应用
重新启动你的应用程序。
现在,当你的应用执行数据库操作时,你应该能在日志中看到完整的 SQL 语句,包括实际的参数值。
例如,你可能会看到这样的日志:
2023-07-10 14:30:45|1|statement|connection1|INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')
注意事项:
- 确保在生产环境中禁用 P6Spy,因为它会对性能产生影响。
- 如果你使用的是 Spring Boot 2.x 版本,你可能需要排除 Spring Boot 的数据源自动配置:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class YourApplication { // ... }
- 然后手动配置数据源。
- 如果你遇到类似 "Unable to resolve constructor" 的错误,可能需要在
spy.properties
中添加:modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
这样设置后,你应该能看到完整的 SQL 语句,而不是参数化的形式。如果你在实施过程中遇到任何问题,请告诉我,我会很乐意帮助你解决。