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执行信息。

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

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

相关文章

  • Java Web中Ajax技术使用方法介绍

    JavaWeb中Ajax技术使用方法介绍 什么是Ajax Ajax全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。 在Java Web中,Ajax可以让前端页面异步地向后台Java Servlet/Controller发送请求,获取响应数据,更新页面的部分内容,从而提升用户交互的体验。 使用Ajax…

    Java 2023年5月26日
    00
  • jsp页面中如何将时间戳字符串格式化为时间标签

    在 JSP 页面中使用时间戳字符串,需要进行格式化为时间标签。下面是如何将时间戳字符串格式化为时间标签的完整攻略。 步骤1:导入时间函数库 首先,需要引入 JSP 内置的时间函数库,以便使用日期和时间相关的函数。 <%@ page import="java.text.SimpleDateFormat" %> <%@ pa…

    Java 2023年6月15日
    00
  • Java字符串去除特殊字符内容的实例

    下面是Java字符串去除特殊字符内容的实例的完整攻略。 1. 确定需要去除的特殊字符 在进行字符串的特殊字符去除操作之前,需要先确定需要去除的特殊字符。常见的特殊字符有空格、制表符、换行符等。可以使用Java字符串的正则表达式进行匹配。 2. 使用replaceAll方法进行特殊字符去除 Java的字符串类中提供了replaceAll方法,可以使用正则表达式…

    Java 2023年5月27日
    00
  • Tomcat Catalina为什么不new出来原理解析

    Tomcat 是一个开源的Servlet容器,用于实现Java Servlet和JavaServer Pages (JSP)。其核心组件是Catalina,它是一个基于Java编写的Web容器,主要负责HTTP请求的接收、转发和响应,同时还提供了JSP的编译和执行功能。在Tomcat应用程序中,我们通常看不到Catalina类的实例化过程,因此很多人会好奇C…

    Java 2023年6月2日
    00
  • JS+CSS实现的日本门户网站经典选项卡导航效果

    实现日本门户网站经典选项卡导航效果,需要使用JS和CSS两种语言。 下面是一些步骤和示例说明: 步骤一:HTML结构 首先,在 HTML 中创建导航选项卡的外层容器,再在容器内创建导航选项卡的标题与内容。 示例: <div class="tab-container"> <ul class="tab-title-…

    Java 2023年6月16日
    00
  • Java实现作业调度的示例代码

    下面是Java实现作业调度的示例代码的攻略: 1. 理解作业调度 在计算机系统中,作业是指用户提交的一项任务。作业调度是指操作系统针对用户提交的作业对其进行管理和调度,使其能够高效地执行。作业调度是一个重要的操作系统功能,可以根据用户的需求和系统资源的使用情况,对作业进行优先级、并发度、执行方式等的调度。 2. 利用Java实现作业调度 Java语言具有很好…

    Java 2023年5月18日
    00
  • Spring boot 整合KAFKA消息队列的示例

    下面我将为您讲解“Spring boot 整合KAFKA消息队列的示例”的完整攻略,该攻略包括以下步骤: 1.环境搭建2.引入maven依赖3.配置application.yml文件4.编写生产者代码5.编写消费者代码6.运行测试 环境搭建 首先需要安装和配置以下环境: 1.Java Development Kit(JDK) 8或更高版本2.Apache K…

    Java 2023年5月20日
    00
  • python,Java,JavaScript实现indexOf

    实现indexOf主要是查找字符串中某个子字符串的位置,以下是Python、Java和JavaScript实现indexOf方法的攻略。 Python实现indexOf方法 Python中字符串类型为str,提供了index()和find()两种方法来实现indexOf的功能。它们的区别在于当子字符串不存在时,index()方法会抛出ValueError异常…

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