P6Spy监控你的Spring boot数据库操作
一、简介:
p6Spy通过劫持JDBC驱动,在调用实际`JDBC`驱动前拦截调用的目标语,达到`SQL`语句日志记录的目的。
它包括`P6Log`和`P6Outage`两个模块。
P6Log 用来拦截和记录任务应用程序的 JDBC 语句
P6Outage 专门用来检测和记录超过配置条件里时间的 SQL 语句
二、使用步骤:
1.导入pom
<!-- 控制台 SQL日志打印插件 --><dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.1</version></dependency>
2.在 spy.properties中指定p6spy配置
# 使用日志系统记录 sqlappender=com.p6spy.engine.spy.appender.Slf4JLogger# 自定义日志打印logMessageFormat=cc.mrbird.febs.common.configure.P6spySqlFormatConfigure# 是否开启慢 SQL记录outagedetection=true# 慢 SQL记录标准 2 秒outagedetectioninterval=2# 开启过滤filter=true# 包含 QRTZ的不打印exclude=QRTZ,select 1
3.实现MessageFormattingStrategy
接口,编写sql输出格式化
import cc.mrbird.febs.common.utils.DateUtil;import com.p6spy.engine.spy.appender.MessageFormattingStrategy;import org.apache.commons.lang3.StringUtils;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;/** * SQL格式化输出 */public class P6spySqlFormatConfigure implements MessageFormattingStrategy { /** * sql格式化输出 */ @Override public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) { return StringUtils.isNotBlank(sql) ? formatFullTime(LocalDateTime.now(), DateUtil.FULL_TIME_SPLIT_PATTERN) " | 耗时 " elapsed " ms | SQL 语句:" StringUtils.LF sql.replaceAll("[\\s] ", StringUtils.SPACE) ";" : StringUtils.EMPTY; } /** * 日期格式化 */ public String formatFullTime(LocalDateTime localDateTime, String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return localDateTime.format(dateTimeFormatter); }}
4、编写application.yml配置文件
spring: datasource: dynamic: # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗 p6spy: true hikari: connection-timeout: 30000 max-lifetime: 1800000 max-pool-size: 15 min-idle: 5 connection-test-query: select 1 pool-name: FebsHikariCP # 配置默认数据源 primary: base datasource: # 数据源-1,名称为 base base: username: root password: 13037489030 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/febs_base?characterEncoding=UTF-8
三、结语:
每次访问数据库都对打印一条sql
赞 (0)