springboot工程,如果动态控制mybatis-plus的sql数据是否输出

  • 项目背景,springboot工程,用mybatis-plus 做orm框架,nacos获取配置。
  • 需求场景:IM项目,需要动态控制sql语句的输出,平时不用输出sql,以免影响性能。如果有异常或者需求需要排查,才输出sql好方便排查问题。

解决: 一般配置输出sql语句,如下配置即可

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

将最后一项log-impl对应的类替换成自己的实现的一个类。如下所示

mybatis-plus:
  configuration:
    log-impl: com.kuailu.im.server.config.MybatisPlusOutImpl

MybatisPlusOutImpl 是自己实现的一个类,用log4j做日志输出框架。具体代码如下:

@Slf4j
public class MybatisPlusOutImpl implements Log {
    public MybatisPlusOutImpl(String clazz) {
        log.info(clazz);
    }

    public boolean isDebugEnabled() {
        return true;
    }

    public boolean isTraceEnabled() {
        return true;
    }

    public void error(String s, Throwable e) {
        log.info(s);
        e.printStackTrace(System.err);
    }

    public void error(String s) {
        log.info(s);
    }

    public void debug(String s) {
        log.info(s);
    }

    public void trace(String s) {
        log.info(s);
    }

    public void warn(String s) {
        log.info(s);
    }
}

这样便将输出sql语句,转为由自定义的类输出。由于该项目已经添加了springboot的actuator。在bootstrap.yml中打开actuator日志的端点:

# 而日志控制需要用到 /loggers 端点,故而需要设置将其暴露。
当然把loggers替换成*也是可以的;开启所有!
management:
  endpoints:
    web:
      exposure:
        include: 'loggers'
        # include: *

然后通过调用url如,发送post请求:

https://localhost:6689/actuator/loggers/com.kuailu.im.server.config.MybatisPlusOutImpl

传参:{"configuredLevel":"error"}

最后传参即MybatisPlusOutImpl的全路径,configuredLevel即将该类的日志级别改为error。这样便不再输出sql语句。待需要输出sql语句时,用同样的方法,传参configuredLevel为info。便又恢复输出sql语句。

打开actuator日志的端点有安全风险,最好做好安全校验。还可以结合springboot的admin模块,直接用界面来控制sql的输出与否。如下所示。在线将MybatisPlusOutImpl基本设置为error。则不再输出sql。点击INFO,则又可以输出sql语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值