SpringBoot统计、监控SQL运行情况的方法详解

关于SpringBoot统计、监控SQL运行情况的方法,可以采用以下两种方式实现:

1. 使用Druid Spring Boot Starter

Druid Spring Boot Starter是阿里巴巴为了简化Druid在Spring Boot中的配置而推出的开箱即用的库。它基于Druid DataSource和Spring Boot自动配置机制,并提供大量属性配置供用户个性化定制。使用这种方法可以方便地监控SQL运行情况,具体步骤如下:

  1. 在Spring Boot中添加Druid Spring Boot Starter依赖
    ```


com.alibaba
druid-spring-boot-starter
${druid.version}

2. 在application.properties/application.yaml文件中进行属性配置
# 配置数据源基本属性
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=

# 配置Druid监控器
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.filters=stat,wall,slf4j

# 配置Druid统计监控Servlet
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
```

通过访问http://localhost:8080/druid/stat/sql.html即可查看SQL运行情况的监控信息

2. 自定义拦截器实现SQL统计与监控

除了使用Druid Spring Boot Starter之外,我们还可以通过自定义拦截器实现SQL统计与监控。以MySQL为例,具体步骤如下:

  1. 在application.properties/application.yaml文件中配置数据源参数
    # 配置数据源基本属性
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. 自定义拦截器实现SQL统计与监控
    ```java
    public class SQLInterceptor implements HandlerInterceptor {

    // 统计SQL执行总耗时
    private ThreadLocal totalTime = new ThreadLocal<>();
    // 统计SQL执行次数
    private ThreadLocal count = new ThreadLocal<>();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    totalTime.set(System.currentTimeMillis());
    count.set(0L);
    return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    long time = System.currentTimeMillis() - totalTime.get();
    long sqlCount = count.get();
    String sql = SQLContextHolder.getCurrentSQL();
    // 输出SQL信息
    System.out.println("[SQL Monitor] Executed SQL: " + sql + ", Time: " + time + ", Count: " + sqlCount);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    // 统计SQL执行次数
    long sqlCount = count.get();
    count.set(sqlCount + 1);
    }

}
3. 在拦截器中获取SQL语句,存储到ThreadLocal中java
public class SQLContextHolder {

  private static ThreadLocal<String> currentSQL = new ThreadLocal<>();

  public static String getCurrentSQL() {
     return currentSQL.get();
  }

  public static void setCurrentSQL(String sql) {
     currentSQL.set(sql);
  }

  public static void clear() {
     currentSQL.set(null);
  }

}
4. 注册拦截器java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
     registry.addInterceptor(new SQLInterceptor());
  }

}
```

这样,每次执行SQL语句时,就能在控制台输出SQL执行信息。

阅读剩余 64%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot统计、监控SQL运行情况的方法详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java简单实现调用命令行并获取执行结果示例

    首先我们需要了解Java如何调用命令行来执行外部的命令。在Java中,可以通过ProcessBuilder或Runtime.getRuntime().exec()两种方式实现。 使用ProcessBuilder调用命令行 ProcessBuilder是一个Java API,它提供了一个类来启动外部进程并与其进行交互。下面是一个简单的Java程序,它使用Pro…

    Java 2023年5月23日
    00
  • 详解@ConfigurationProperties实现原理与实战

    详解@ConfigurationProperties实现原理与实战 什么是@ConfigurationProperties @ConfigurationProperties是Spring Boot提供的一种基于类型安全的配置方式。它可以方便地将properties文件中的属性映射到Java Bean中。可以通过@ConfigurationProperties…

    Java 2023年6月16日
    00
  • java应用开发之Mybatis通过Mapper代理自定义接口的实现

    Java应用开发之Mybatis通过Mapper代理自定义接口的实现 背景介绍 Mybatis可以通过Mapper代理的方式来实现自定义接口的功能,这种方式能够让Mybatis操作数据库变得更加灵活,能够满足不同业务场景的需求。本文将详细讲解如何使用Mapper代理自定义接口来实现Mybatis的功能。 步骤 步骤一:定义自定义接口 在Mybatis中,我们…

    Java 2023年5月20日
    00
  • Spring Boot 动态数据源示例(多数据源自动切换)

    下面我将详细讲解 Spring Boot 动态数据源示例(多数据源自动切换)的完整攻略。 什么是动态数据源 动态数据源是一种可以在程序运行时自动切换数据源的技术,它可以在不重启应用的情况下帮助我们实现多数据源的自动切换,非常便于开发和维护。在实践中,我们可以使用 Spring Boot 官方提供的 AbstractRoutingDataSource 类来实现…

    Java 2023年5月20日
    00
  • 详细分析Java 泛型的使用

    详细分析Java 泛型的使用 一、什么是Java泛型 Java泛型是Java SE 5引入的一种新特性,它为Java的类型系统引入了参数化类型的概念。我们在定义类、接口、方法时,可以指定使用泛型来处理这些类型参数,从而使得代码更加通用。 二、为什么要使用Java泛型 类型安全:泛型可以让代码更加健壮和安全,因为泛型会在编译时期进行类型检查。 代码复用:通过使…

    Java 2023年5月26日
    00
  • springMVC向Controller传值出现中文乱码的解决方案

    针对springMVC向Controller传值出现中文乱码的问题,可以采取以下步骤: 1. 在web.xml文件中添加过滤器 在web.xml文件中添加如下过滤器: <filter> <filter-name>Character Encoding Filter</filter-name> <filter-class…

    Java 2023年5月20日
    00
  • Linux环境搭建之安装/配置Tomcat的方法

    关于“Linux环境搭建之安装/配置Tomcat的方法”的攻略,我给您提供以下步骤及示例。 安装Java Tomcat依赖Java运行环境,所以首先需要安装Java: # 添加yum源 sudo yum install -y java-1.8.0-openjdk-devel # 设置Java环境变量 export JAVA_HOME=/usr/lib/jvm…

    Java 2023年5月20日
    00
  • Java仿12306图片验证码

    下面我会详细讲解“Java仿12306图片验证码”的实现攻略。 简介 图片验证码是一种常用的验证码类型,它可以有效防止机器人恶意攻击。在Java Web应用中,实现验证码功能可以采用Kaptcha、JCaptcha等开源组件,也可以自己编写代码实现。 本文主要介绍如何使用Java编写代码实现仿12306的图片验证码。 实现过程 1. 随机生成验证码字符串 首…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部