大数跨境
0
0

高级开发!Spring Boot 自定义SQL日志记录(包括, 参数,耗时),支持MyBatis,JPA等

高级开发!Spring Boot 自定义SQL日志记录(包括, 参数,耗时),支持MyBatis,JPA等 Spring全家桶实战案例
2024-12-10
2
导读:轻松实现SQL日志记录功能,支持MyBatis,JPA等JDBC实现

Spring Boot 3实战案例合集》现已囊括超过50篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最前沿的技术资讯与实践经验。欢迎积极订阅,享受不断升级的知识盛宴!订阅用户将特别获赠合集内所有文章的最终版MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。

环境:SpringBoot3.2.5



1. 简介

不论是处于开发阶段还是线上运行环境,SQL日志记录是调试、监控和优化数据库操作的重要手段。尽管有许多第三方框架和工具提供了强大的日志记录功能,但在某些情况下,我们可能需要自定义SQL日志记录以满足特定需求。自定义SQL日志记录功能允许开发者精确控制日志的格式、内容以及存储方式,从而更灵活地应对各种开发场景。

通过实现自定义SQL日志记录,我们可以记录每次数据库操作的详细信息,包括执行的SQL语句、执行时间、参数值等。这些信息对于排查问题、优化性能以及审计数据库操作都非常有价值。

本文将介绍如何在不使用任何第三方框架的情况下,实现SQL的日志记录功能。

在实现自定义的SQL记录功能之前,我们假设读者已经具备了一定的JDBC编程基础。JDBC是Java平台提供的用于连接和操作数据库的一套API,它使得Java应用程序能够与多种数据库进行交互。了解JDBC的基本概念和常用操作,如建立数据库连接、执行SQL语句以及处理结果集等,对于理解和实现自定义SQL记录功能至关重要。因此,请确保你已经熟悉了JDBC编程的相关知识,以便更好地跟随本文的讲解和示例。下面是使用JDBC执行SQL的示例:

// 数据库连接信息private static final String DB_URL = "jdbc:mysql://localhost:3306/big_data";private static final String USERNAME = "root" ;private static final String PASSWORD = "xxxooo" ;
public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 1. 注册JDBC驱动(这一步在新版本的JDBC中通常可以省略) // Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 打开连接 conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD); // 3. 执行查询操作 String querySQL = "SELECT id, name, age FROM users WHERE id = ?"; pstmt = conn.prepareStatement(querySQL); // 设置参数,查询id为1的用户 pstmt.setInt(1, 1) ;    // 执行查询操作 rs = pstmt.executeQuery() ; // 处理结果集 while (rs.next()) { int id = rs.getInt("id") ; String name = rs.getString("name") ; int age = rs.getInt("age") ; System.out.printf("ID: %s, Name: %s, Age: %s%n", id, name, age) ; } // 4. 执行修改操作(更新) String updateSQL = "UPDATE users SET age = ? WHERE id = ?"; pstmt = conn.prepareStatement(updateSQL) ; // 设置占位符 pstmt.setInt(1, 25) ; pstmt.setInt(2, 1) ;    // 执行更新操作    pstmt.executeUpdate() ;    // 5.关闭资源 }}

以上是一个简化的示例,展示了如何通过JDBC进行基本的数据库编程任务,如编写SQL语句、设置参数以及处理返回结果。

基于上述内容,接下来我们将逐步实现SQL记录功能。我们会按照如下的步骤实现:

  1. 在Spring Boot项目中自定义一个HikariDataSource

  2. 创建并自定义一个Connection类,通过自定义的Connection实现SQL的记录

  3. 代理默认PreparedStatement,以便记录SQL执行的参数及SQL执行耗时情况

     

接下来我们将按照上面3个步骤实现SQL日志的记录功能。

2. 实战案例

2.1 自定义数据源

从Spring Boot 2开始,默认的数据源是HikariCP。当我们自定义了一个DataSource并将其定义为Spring容器中的一个Bean时,Spring Boot将会优先使用我们自定义的这个数据源Bean,而不是默认的HikariCP数据源。

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读195
粉丝0
内容832