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

来源:https://www.icode9.com/content-2-766601.html

(0)

相关推荐