【Java】SpringBoot集成P6spy,实现自定义SQL日志打印

这篇具有很好参考价值的文章主要介绍了【Java】SpringBoot集成P6spy,实现自定义SQL日志打印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在项目中对数据库中进行操作调试的时候,最重要的一个功能就是SQL打印

如果使用Mybatis-plus的话,他会自带一个SQL打印的功能。虽然它可以打印,但我觉得还不够优雅,因为包含着很多我们不需要的信息,所以这篇文章实现一下在代码中优雅的打印SQL。

介绍

P6spy是什么?

P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy 分发包包括P6Log,它是一个可记录任何 Java 应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。

我们最需要的功能,查看sql语句,不是预编译的带问号的哦,而是真正的数据库执行的sql,更直观,更简单。

使用

1 导入相关依赖

        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>${version:}</version>//目前最新版3.9.1
        </dependency>

2 修改application.yml配置文件,只需要将连接驱动进行修改

url: jdbc:p6spy:mysql://localhost:3306/db1_datasource
driver-class-name: com.p6spy.engine.spy.P6SpyDriver

3 新增spy.properties文件

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
appender=com.p6spy.engine.spy.appender.StdoutLogger
excludecategories=info,debug,result,batc,resultset
deregisterdrivers=true
dateformat=yyyy-MM-dd HH:mm:ss
driverlist=com.mysql.cj.jdbc.Driver
outagedetection=true
outagedetectioninterval=2

#自定义SQL打印处理类
logMessageFormat=com.xxx.xxx.P6SpyLogger

4 新增P6SpyLogger,处理打印的SQL语句

import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

import java.text.SimpleDateFormat;
import java.util.Date;

public class P6SpyLogger implements MessageFormattingStrategy {

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

    /**
     * 自定义sql日志打印
     *
     * @param connectionId 连接标识
     * @param now          执行时间
     * @param elapsed      执行秒数ms
     * @param category     statement
     * @param prepared     准备sql语句
     * @param sql          sql语句
     * @param s4           数据库url连接
     * @return {@link String}
     */
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String s4) {
        System.out.println();
        if (!"".equals(sql.trim())) {
            String sqlBegin = "============== SQL LOGGER BEGIN ==============";

            String sqlExecuteTime = "SQL 执行时间       :" + this.format.format(new Date()) + "\n";
            String elapsedStr = "SQL 执行毫秒       :" + elapsed + "ms" + "\n";
            String sqlPrint = "SQL 执行语句       :" + sql;

            //String sqlPrint = !"".equals(sql.trim()) ? this.format.format(new Date()) + " | took " + elapsed + "ms | " + category + " | connection " + connectionId + "\n " + sql + ";" : "";
            String sqlEnd = "==============  SQL LOGGER END  ==============";

            return sqlBegin + "\r\n" + sqlExecuteTime + elapsedStr + sqlPrint + "\r\n" + sqlEnd;
        }
        return "";
    }
}

5 查看SQL打印效果

============== SQL LOGGER BEGIN ==============
SQL 执行时间       :2023-07-12 11:37:43:296
SQL 执行毫秒       :5ms
SQL 执行语句       :select * from db2_user
==============  SQL LOGGER END  ==============
============== SQL LOGGER BEGIN ==============
SQL 执行时间       :2023-07-12 11:37:47:707
SQL 执行毫秒       :1ms
SQL 执行语句       :select * from db1_user where age = 18 order by create_time desc
==============  SQL LOGGER END  ==============

总结

可以根据方法的参数进行不同的搭配来实现优雅的SQL打印,如果这篇文章对你有帮助的话,就请点个赞支持一下吧!文章来源地址https://www.toymoban.com/news/detail-565120.html

到了这里,关于【Java】SpringBoot集成P6spy,实现自定义SQL日志打印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • SpringBoot【集成 jasypt】实现配置信息自定义加解密(自定义的属性探测和密码解析器)

    Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。它可以帮助开发人员在应用程序中加密密码、敏感信息和数据通信,还包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。如果您正在使用Spring B

    2024年02月05日
    浏览(9)
  • Spring Boot学习随笔- 集成MyBatis-Plus(三)自定义SQL、分页实现(PaginationInterceptor )、更新和删除详细方法

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 自定义mapper文件是为了应对一些更复杂的查询场景,首先先配置映射路径 由于这里的mapper文件放在java文件夹中,所以要在pom.xml里进行配置 mapper 测试 在MyBatis Plus中, 物理分页 和 内

    2024年02月03日
    浏览(13)
  • Springboot 自定义 Mybatis拦截器,实现 动态查询条件SQL自动组装拼接(玩具)

    Springboot 自定义 Mybatis拦截器,实现 动态查询条件SQL自动组装拼接(玩具)

    ps:最近在参与3100保卫战,战况很激烈,刚刚打完仗,来更新一下之前写了一半的博客。 该篇针对日常写查询的时候,那些动态条件sql 做个简单的封装,自动生成(抛砖引玉,搞个小玩具,不喜勿喷)。 来看看我们平时写那些查询,基本上都要写的一些动态sql:   一个字段

    2024年02月12日
    浏览(13)
  • SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

    SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

    导入 starter 依赖导入 autoconfigure 寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件 启动,加载所有 自动配置类 xxxAutoConfiguration 给容器中配置功能 组件 组件参数 绑定到 属性类 中。 xxxProperties 属性类 和 配置文件 前缀项绑定 @Contional 派生的条件

    2024年02月16日
    浏览(11)
  • Java21 + SpringBoot3集成easy-captcha实现验证码显示和登录校验

    Java21 + SpringBoot3集成easy-captcha实现验证码显示和登录校验

    近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。 本项目为前后端分离开发,后端基于 Java21 和 SpringBoot3 开发,后端使用 Spring Security 、 JWT 、 Spr

    2024年01月23日
    浏览(10)
  • 【SpringBoot笔记36】SpringBoot自定义WebSocketHandler集成WebSocket

    这篇文章,主要介绍SpringBoot自定义WebSocketHandler集成WebSocket。 目录 一、SpringBoot集成WebSocket 1.1、添加WebSocket依赖 1.2、自定义WebSocketHandler 1.3、注册WebSocket服务端

    2024年02月14日
    浏览(7)
  • springBoot集成caffeine,自定义缓存配置 CacheManager

    springBoot集成caffeine,自定义缓存配置 CacheManager

    目录 springboot集成caffeine Maven依赖 配置信息:properties文件 config配置 使用案例 Caffeine定制化配置多个cachemanager springboot集成redis并且定制化配置cachemanager Caffeine是一种基于 服务器内存的缓存库 。它将数据存储在应用程序的内存中,以实现快速的数据访问和高性能。 由于Caffei

    2024年02月13日
    浏览(9)
  • springboot集成kafka的相关配置及自定义

    springboot集成kafka的相关配置及自定义

    之前的文章末尾,简单的实现了springboot集成kafka,完成了简单的测试,今天我们来扩展一下相关内容。 首先详解一下配置文件的内容: 以上的producer和consumer的相关配置也可以在java文件中实现: 如上图的实现,自己可以手动实现一下。 kafka内部自己实现分区、策略等一系列

    2024年02月08日
    浏览(7)
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl

    Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl

    源码及更详细的介绍说明参见Git上的 README.md 文档 https://github.com/asleepyfish/chatgpt 本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo 流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatgpt-vue 后续使用方法和api版本更新均在Github的READM

    2024年02月16日
    浏览(28)
  • Java调用ChatGPT(基于SpringBoot),实现可连续对话和流式输出的ChatGPT API(可自定义实现AI助手)

    Java调用ChatGPT(基于SpringBoot),实现可连续对话和流式输出的ChatGPT API(可自定义实现AI助手)

    源码及更详细的介绍说明参见Git上的 README.md 文档 https://github.com/asleepyfish/chatgpt 本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo 流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatgpt-vue 后续使用方法和api版本更新均在Github的READM

    2023年04月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包