能不能不要打印jpa的占位符参数,我就想打印实际的值,自定义P6Spy拦截器

很好,我来详细解释如何使用 P6Spy 来打印完整的 SQL 语句。

步骤 1: 添加 P6Spy 依赖

在你的 Maven pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>

步骤 2: 修改数据源配置

在你的 application.propertiesapplication.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')

注意事项:

  1. 确保在生产环境中禁用 P6Spy,因为它会对性能产生影响。
  2. 如果你使用的是 Spring Boot 2.x 版本,你可能需要排除 Spring Boot 的数据源自动配置:
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    public class YourApplication {
        // ...
    }
  3. 然后手动配置数据源。
  4. 如果你遇到类似 "Unable to resolve constructor" 的错误,可能需要在 spy.properties 中添加:
    modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory

    这样设置后,你应该能看到完整的 SQL 语句,而不是参数化的形式。如果你在实施过程中遇到任何问题,请告诉我,我会很乐意帮助你解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值