前言
mybatis-plus提供了sql分析与打印的功能,通过集成p6spy
组件,可以方便地输出sql语句及其执行时长。本功能适用于mybatis-plus 3.1.0
及以上版本。
一、p6spy简介
p6spy 是一个针对数据库访问进行拦截和记录的工具,它通过代理jdbc驱动程序来工作。这意味着你的应用程序可以像往常一样使用jdbc,而p6spy
会在幕后记录所有的sql语句及其执行时间。这对于开发和调试过程中的sql优化非常有用。
p6spy
不仅限于记录sql日志,它还提供了一些高级功能,如:
- 慢sql检测:通过配置
outagedetection和outagedetectioninterval
,p6spy可以记录执行时间超过设定阈值的sql语句。 - 自定义日志格式:通过
logmessageformat
,你可以自定义sql日志的输出格式,包括时间戳、执行时间、sql语句等。 - 日志输出控制:
appender
配置项允许你选择日志输出到控制台、文件或日志系统。 p6spy
是一个强大的工具,它为mybatis-plus
用户提供了便捷的sql分析与打印功能。通过合理配置,你可以在开发和测试阶段有效地监控和优化sql语句。然而,由于性能损耗,建议在生产环境中谨慎使用。
二、示例工程
为了更好地理解如何使用这一功能,可以参考官方提供的示例工程:
1. 依赖引入
首先,需要在项目中引入p6spy
依赖。以下是maven和gradle两种构建工具的引入方式:
<dependency> <groupid>p6spy</groupid> <artifactid>p6spy</artifactid> <version>3.9.1</version> </dependency>
2. 配置
接下来,需要在application.yml
或application.properties
中进行相应的配置。
application.yml
spring: datasource: driver-class-name: com.p6spy.engine.spy.p6spydriver url: jdbc:p6spy:h2:mem:test # 其他数据库配置...
spy.properties
p6spy
的配置文件spy.properties
包含了多个配置项,以下是一些关键配置的示例:
# 模块列表,根据版本选择合适的配置 modulelist=com.baomidou.mybatisplus.extension.p6spy.mybatispluslogfactory,com.p6spy.engine.outage.p6outagefactory # 自定义日志格式 logmessageformat=com.baomidou.mybatisplus.extension.p6spy.p6spylogger # 日志输出到控制台 appender=com.baomidou.mybatisplus.extension.p6spy.stdoutlogger # 取消jdbc驱动注册 deregisterdrivers=true # 使用前缀 useprefix=true # 排除的日志类别 excludecategories=info,debug,result,commit,resultset # 日期格式 dateformat=yyyy-mm-dd hh:mm:ss # 实际驱动列表 # driverlist=org.h2.driver # 开启慢sql记录 outagedetection=true # 慢sql记录标准(单位:秒) outagedetectioninterval=2
三、spring boot集成
对于spring boot项目,可以使用p6spy-spring-boot-starter
来简化集成过程。
1. 依赖
<dependency> <groupid>com.github.gavlyukovskiy</groupid> <artifactid>p6spy-spring-boot-starter</artifactid> <version>1.9.1</version> </dependency>
2. 配置
decorator: datasource: p6spy: # 日志格式 log-format: "\ntime:%(executiontime) || sql:%(sql)\n" # 自定义日志类 logging: custom custom-appender-class: com.example.testinit.config.stdoutlogger
public class stdoutlogger extends com.p6spy.engine.spy.appender.stdoutlogger { public void logtext(string text) { system.err.println(text); } }
发表评论