p6spy代理MyBatis控制台打印完整SQL执行语句

8 篇文章 0 订阅
导读执行SQL打印
简介在开发的过程中控制台打印sql的查询条件都是?,运行起来很麻烦,在这帮助大家获得到完整的执行SQL

第一步,引入依赖

<!-- p6spy -->
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>
<!-- 格式化SQL输出控制台用 -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>6.1.6.Final</version>
</dependency>

第二步,MySQL驱动连接配置加上jdbc:p6spy代理

spring:
  datasource:
    host: jdbc:p6spy:mysql://xxxxxx:3306
    url: ${spring.datasource.host}/xxxx?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
    username: xxxxxx
    password: xxxxxx
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    initialSize: 5
    minIdle: 5
    maxActive: 20

第三步,spy.properties配置文件放在resources下

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 使用日志系统记录sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 是否开启日志过滤 默认false, 这项配置是否生效前提是配置了 include/exclude/sqlexpression
filter=true
## 过滤 Log 时所排除的表名列表,以逗号分隔。
exclude=QRTZ_SCHEDULER_STATE,QRTZ_TRIGGERS,QRTZ_LOCKS,QRTZ_FIRED_TRIGGERS,dual
## 配置记录Log例外
excludecategories=info,debug,result,commit,resultset
# 设置使用p6spy driver来做代理
deregisterdrivers=true
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
databaseDialectTimestampFormat = yyyy-MM-dd HH:mm:ss
# 实际驱动
driverlist=com.mysql.cj.jdbc.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2
# mybatisplus自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger

第四步,格式化控制台输出

spy.properties配置

#自定义日志格式,在类中定义
logMessageFormat=com.xxx.config.P6SpyLogger
package com.xxx.config;

import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
import org.hibernate.engine.jdbc.internal.BasicFormatterImpl;
import org.hibernate.engine.jdbc.internal.Formatter;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * p6spy代理_格式化SQL输出控制台
 *
 * @date:2022/9/17
 * @author:WángHóngKǎi
 * @company:利滚利科技有限公司
 */
public class P6SpyLogger implements MessageFormattingStrategy {

    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

    private static final Formatter formatter;

    static {
        formatter = new BasicFormatterImpl();
    }

    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        StringBuilder sb = new StringBuilder();
        return !"".equals(sql.trim()) ? sb.append(this.format.format(new Date())).append(" | took ").append(elapsed).append("ms | ").append(category).append(" | connection ").append(connectionId).append(formatter.format(sql)).append(";").toString()  : "";
    }
}

成功效果
在这里插入图片描述


PS: 如果有帮助到你,请为我点个 👍👍👍 赞 👍👍👍
❤️不定期推送Java基础、设计模式、数据库知识、全栈分布式微服务架构等 😄😄😄
❤️关注就是我最大的动力,💖💖💖 感谢你这么优秀还关注我 💖💖💖一起学习,获得更多收获 😍😍😍


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值