首页 > 其他分享 >【工具使用】【SpringBoot】【P6spy】P6spy 的使用

【工具使用】【SpringBoot】【P6spy】P6spy 的使用

时间:2024-08-20 16:52:28浏览次数:7  
标签:SpringBoot String sql param p6spy 使用 message P6spy

1  前言

今儿在看 HikariCP数据库连接池实战我主要是想看下,连接的管理、连接的获取及释放。但是看到第五章的时候,书中提到 P6spy,说是能很容易监控到 JDBC 中执行的 SQL语句。那我们平时 SpringBoot 微服务对数据的操作,不管是 JDBCTemplate、还是 Mybatis、Hibernate 最后的落点其实就是 JDBC,我们本节就来试试 SpringBoot 下 P6spy 记录 SQL。 

2  实践

我们直接按书上的步骤操作下:

2.1  配置改变

(1)引入依赖

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.8.2</version>
</dependency>

(2)修改数据源信息

# 驱动由原来的
spring.datasource.driver-class-name = org.postgresql.Driver
# 变成
spring.datasource.driver-class-name = com.p6spy.engine.spy.P6SpyDriver

# JDBCURL 由原来的
spring.datasource.url = jdbc:postgresql://localhost:5432/test
# 变成(加上p6spy)
spring.datasource.url = jdbc:p6spy:postgresql://localhost:5432/test

(3)添加 spy.properties

driverlist=org.postgresql.Driver
appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.virtuous.demo.laboratory.p6spy.P6spyTest

自定义打印格式:

/**
 * @author: kuku
 * @description
 */
public class P6spyTest implements MessageFormattingStrategy {

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

    /**
     * 自定义sql日志打印
     *
     * @param connectionId 连接标识
     * @param now          当前时间
     * @param elapsed      执行耗时ms(需要注意的是这里的耗时指的是从发送sql到服务器截止到收到服务器响应结果的总耗时,而不是sql本身在服务器的执行时间)
     * @param category     statement 操作的类型,比如查询,更新,commit,rollback等
     * @param prepared     预编译sql语句 不打印具体的参数
     * @param sql          真实的sql语句 参数占位符会被真正的参数值替换
     * @param url          数据库url连接
     * @return {@link String}
     */
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        Map<String, Object> message = new LinkedHashMap<>(4);
        if (StringUtils.isNoneBlank(prepared, sql) ) {
            message.put("开始时间:", format.format(new Date(Long.parseLong(now))));
            message.put("执行耗时:", String.format("%sms", elapsed));
            String newPrepared = prepared.replace("   ", "").replace("\n", " ");
            message.put("预编译SQL语句:", newPrepared);
            String newSql = sql.replace("   ", "").replace("\n", " ");
            message.put("真实执行SQL语句:", newSql);
            return JSONObject.toJSONString(message, true);
        }
        return null;
    }
}

2.2  执行效果

3  小结

好啦,本节暂时就看到这里,有理解不对的地方欢迎指正。

标签:SpringBoot,String,sql,param,p6spy,使用,message,P6spy
From: https://www.cnblogs.com/kukuxjx/p/18369536

相关文章

  • 使用微软Detours库进行模块枚举
    Detours是微软开发的一个强大的WindowsAPI钩子库,用于监视和拦截函数调用。它广泛应用于微软产品团队和众多独立软件开发中,旨在无需修改原始代码的情况下实现函数拦截和修改。Detours在调试、监控、日志记录和性能分析等方面表现出色,已成为开发者的重要工具。本章将指导读者运......
  • 使用微软Detours库进行DLL注入
    Detours是微软开发的一个强大的WindowsAPI钩子库,用于监视和拦截函数调用。它广泛应用于微软产品团队和众多独立软件开发中,旨在无需修改原始代码的情况下实现函数拦截和修改。本篇文章旨在帮助开发者更好地理解和应用Detours库进行DLL注入操作,从而实现对目标进程的高效控制和管......
  • 使用python-slim镜像遇到无法使用PostgreSQL的问题
    前言之前不是把DjangoStarter的docker方案重新搞好了吗一开始demo部署是使用SQLite数据库的,用着没问题,但很快切换到PostgreSQL的时候就遇到问题了…报错docker启动之后,app容器报错django.core.exceptions.ImproperlyConfigured:Errorloadingpsycopg2orpsycopg......
  • 局域网中使用智能卡登录
    计算机是工作中不可缺少的工具,当计算机作为实验室的仪器主机或者公共电脑,使用智能卡登录或者员工卡登录就显得非常合适,既方便管理,而且还能随时查询登录日志。计算机智能卡登录的优势:1、插卡登录,拔卡锁屏注销或者关机。2、系统安全可靠,可以全部部署在局域网内,不连接任何外网。3、......
  • IDA Pro 反汇编器使用详解,适合逆向新人和老人的权威指南(一)
    一、前言IDA背景知识反汇编和反编译在谈论IDA的使用之前,我们先探讨一下什么是反汇编和反编译?我们都知道编程过程,就是将源程序通过编译器转化为汇编语言,或者直接转换成机器语言(或某种大致的等价形式,如字节码)。而为了对程序进行逆向工程,我们使用各种工具来撤销汇编和编译过程;这......
  • obsidian使用
    前言本文主要整理在obsidian使用过程中遇到的一些不合逻辑和给使用造成困扰的地方的解决方法。将持续更新.......一个非常棒的知识管理社区:PKMer_PKMer链接的格式问题尽量不要包含空格,因为会去保存对应的图片或者附件到同名的文件夹中,在链接调用的时候,这个链接也要把空格表示......
  • 车载网络测试实操源码_使用CAPL脚本控制继电器实现CAN线、电源线的通断
    系列文章目录使用CAPL脚本解析hex、S19、vbf文件使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文使用CAPL脚本控制继电器实现CAN线、电源线的通断使用CAPL脚本实现BUSOFF干扰测试使用CAPL脚......
  • 《DNK210使用指南 -CanMV版 V1.0》
    第二十章machine.I2C类实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正......
  • 《深入探究 @SpringBootApplication 注解的内部原理》
    《深入探究@SpringBootApplication注解的内部原理》@SpringBootApplication注解涵盖了SpringBoot的包扫描原理、自动装配原理等众多重要原理。接下来,我们将对该注解展开深入且详尽的研究。而研究上述原理的关键,在于剖析@SpringBootApplication内部的构成结构,如下图:......
  • 【Winform】TabControl使用汇总
     一、改变标签颜色tabControl1.DrawMode=System.Windows.Forms.TabDrawMode.OwnerDrawFixed;ItemTabControl.DrawItem+=newSystem.Windows.Forms.DrawItemEventHandler(ItemTabControl_DrawItem); privatevoidtabControl1_DrawI......