mybatisplus打印SQL耗时官方推荐版

文章介绍了如何在项目中添加P6Spy依赖,用于监控数据库操作。通过修改Spring的数据源配置,使用P6SpyDriver替换原驱动,并展示了日志打印示例。同时,文章提到了配置P6Spy的日志输出方式,包括自定义日志打印、使用Slf4JLogger以及慢SQL检测的设置。

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

增加依赖

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

修改配置

spring:
    datasource: 
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
        url: jdbc:p6spy:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
        

打印日志如下

2023-04-03 17:15:28.833 INFO  [http-nio-8099-exec-2] --> :  Consume Time:37 ms 2023-04-03 17:15:28
 Execute SQL:select * test where id = 1

在配置文件的resource目录增加配置文件,已修改,可以直接打印耗时到日志文件中

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
#appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

### 配置 Spring Boot 和 MyBatis Plus 打印慢查询 SQL 为了实现这一目标,在 `application.properties` 或者 `application.yml` 文件中可以设置特定属性来控制日志记录行为。 对于基于 `properties` 的配置文件: ```properties mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.baomidou.mybatisplus.extension.spring.MybatisPlusAutoConfiguration=DEBUG ``` 上述配置启用了 MyBatis Plus 日志功能并将其级别设为 DEBUG,这有助于捕获详细的执行信息[^1]。 然而,仅通过调整日志等级可能无法精确区分哪些是耗时过长的操作。为此,可以通过自定义拦截器的方式进一步增强监控能力。创建一个新的类继承 `AbstractBaseInterceptor` 并重写相应的方法以测量每次数据库交互所花费的时间。一旦检测到超过预设阈值的情况,则将该条目标记为“慢查询”。 下面是一个简单的 Java 实现例子: ```java import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.plugin.*; import java.sql.Statement; import java.util.Properties; @Intercepts({ @Signature(type = StatementHandler.class, method = "query", args = {Statement.class}) }) public class SlowQueryLogger extends AbstractBaseInterceptor { private static final int SLOW_QUERY_THRESHOLD_MS = 50; // 设置慢查询阈值为50毫秒 public Object intercept(Invocation invocation) throws Throwable { long startTime = System.currentTimeMillis(); try { return invocation.proceed(); } finally { long endTime = System.currentTimeMillis(); if ((endTime - startTime) > SLOW_QUERY_THRESHOLD_MS) { PluginUtils.getMetaObject(invocation.getTarget()).getValue("delegate.boundSql").toString()); System.out.println("Slow Query Detected: Took " + (endTime - startTime) + " ms"); } } } public void setProperties(Properties properties) {} } ``` 这段代码展示了如何构建一个名为 `SlowQueryLogger` 的拦截器,用于监测所有查询操作,并当它们的执行时间超过了指定的阈值(这里是50ms)时发出警告。 最后一步是在应用程序启动期间注册这个新的拦截器实例。可以在主应用类上添加如下注解完成此过程: ```java @Configuration public class MyBatisConfig { @Bean public Interceptor slowQueryLogger() { return new SlowQueryLogger(); } } ``` 这样就完成了整个流程——从基础的日志配置直到高级别的性能分析工具集成,使得开发者能够有效地追踪那些影响系统响应速度的关键因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值