mybatis打印完整的SQL,p6spy

介绍打印完成的SQL,会降低性能,不要在生产环境使用,我只是在本地,自己的代码中设置,不提交。主要是为了方便,在控制台看见SQL的时候,不用去拼接参数,可以直接复制出来执行。

配置方法

参考地址:聊聊如何利用p6spy进行sql监控-腾讯云开发者社区-腾讯云

1.引入依赖

复制代码
   <dependency>
        <groupId>p6spy</groupId>
         <artifactId>p6spy</artifactId>
         <version>${p6spy.version}</version>
     </dependency>

2、切换项目中的jdbc驱动以及数据源

复制代码
 spring:
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         # 更换驱动
         driverClassName: ${DRIVER_CALSS_NAME:com.p6spy.engine.spy.P6SpyDriver}
         # 换地址
         url: ${DATASOURCE_URL:jdbc:p6spy:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai}
         username: ${DATASOURCE_USERNAME:root}
         password: ${DATASOURCE_PWD:123456}

3、 在resource目录下添加spy.properties

java 复制代码
#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

这里需要修改为自己的
logMessageFormat=com.xxx.gpm.platform.config.CustomP6SpyLogger 



#日志输出到控制台
#appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql  ----  这里需要换成自己写的全包名类
#appender=com.p6spy.engine.spy.appender.Slf4JLogger


 这里需要修改自己的
appender=com.xxx.gpm.platform.config.CustomStdoutLogger



# 设置 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

4、 自定义日志格式【可选】

java 复制代码
package com.xxx.gpm.platform.config;

import com.alibaba.fastjson.JSONObject;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

import java.util.LinkedHashMap;
import java.util.Map;

public class CustomP6SpyLogger implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        Map<String, Object> message = new LinkedHashMap<>(8);
        String newPrepared = prepared.replace("   ", "").replace("\n", " ");
        message.put("prepared", newPrepared);
        String newSql = sql.replace("   ", "").replace("\n", " ");
        message.put("sql", newSql);
        return JSONObject.toJSONString(message, true);
    }
}
复制代码
 
在spy.properties中配置自定义日志格式

logMessageFormat=com.github.lybgeek.p6spy.extentsion.CustomP6SpyLogger

5、自定义日志输出【可选】

java 复制代码
package com.xxx.gpm.platform.config;

public class CustomStdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger{

    @Override
    public void logText(String text) {
        System.out.println("sql:" + text);
    }
}

在spy.properties中配置自定义日志输出

appender=com.github.lybgeek.p6spy.extentsion.CustomStdoutLogger

6、测试观察控制台输出

代码语言:java

AI代码解释

复制代码
 sql: 耗时:1 ms 2022-05-10 11:38:34
  执行 SQL:SELECT id,username,password,fullname,mobile,email FROM t_user

总结

p6spy可以根据sql的执行效率分析sql对sql进行优化,但因为p6spy会对性能有一定影响,因此不适合在正式环境上使用。此外关于p6spy更详细的配置可以查看如下链接

https://p6spy.readthedocs.io/en/latest/configandusage.html

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-p6spy

相关推荐
oradh1 天前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl1 天前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
闻道且行之1 天前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.1 天前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨1 天前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵1 天前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶1 天前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
smilejingwei1 天前
Trae+SQLazy 实践 SQL 国产化移植:Oracle => 达梦
数据库·sql·oracle
意疏1 天前
2026年远控软件安全横评:六款主流工具逐项核查——官方文档、一手实测与安全事件,全摊开
大数据·前端·数据库
名不经传的养虾人1 天前
从0到1:企业级AI项目迭代日记 Vol.90|Agent变快了,Judge定下来了
大数据·数据库·人工智能·ai编程·企业ai