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

yizhihongxing

关于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日

相关文章

  • 什么是JVM调优?

    JVM调优指的是对Java虚拟机(JVM)进行优化,以提高Java应用程序的性能和稳定性。JVM调优需要仔细研究应用程序的运行状况,分析GC日志和线程转储,调整JVM的内存配置和垃圾回收参数等来提高应用程序的性能。 下面,我们来详细介绍JVM调优的使用攻略: 步骤一:分析GC日志 首先,我们需要通过分析GC日志找出应用程序中发生GC的原因及频率。我们可以使用…

    Java 2023年5月10日
    00
  • IDEA+Maven搭建JavaWeb项目的方法步骤

    下面是“IDEA+Maven搭建JavaWeb项目”的详细攻略,其中包含两条实例操作。 环境准备 安装Java JDK,并配置Java环境变量。 安装Maven,并配置Maven环境变量。 安装IntelliJ IDEA开发工具。 创建Maven项目 打开IntelliJ IDEA,进入主界面,选择“Create New Project”。 在弹出的页面中,…

    Java 2023年5月20日
    00
  • springboot相关面试题汇总详解

    Spring Boot相关面试题汇总详解 Spring Boot是一个流行的Java框架,可以帮助开发人员快速构建和部署应用程序。在本文中,将详细讲解Spring Boot相关面试题汇总,包括Spring Boot的核心特性、自动配置、启动流程、应用上下文等。 1. 什么是Spring Boot? Spring Boot是一个流行的Java框架,可以帮助开发…

    Java 2023年5月14日
    00
  • mybatis快速入门学习教程新手注意问题小结

    下面是针对“mybatis快速入门学习教程新手注意问题小结”的完整攻略。 1. 简介 MyBatis是一个持久层框架,它可以简化Java对象(POJO)与数据库之间的交互工作。同时,MyBatis还支持调用存储过程和执行高级查询。 在使用MyBatis时,需要注意以下几点: 准确配置MyBatis配置文件 明确SQL语句,并将其写入Mapper 通过Mapp…

    Java 2023年6月1日
    00
  • Jsp自定义标签和方法详解

    下面我来详细讲解“Jsp自定义标签和方法详解”的完整攻略。 一、自定义标签 1.1 概述 JSP标签可以分为三类:JSTL标签、自定义标签和自定义函数。其中,自定义标签是指在JSP页面中使用自己开发的标签,实现特定的功能。 1.2 步骤 自定义标签的开发主要分为以下步骤: 1)创建TLD文件:在Web应用的WEB-INF目录下创建一个.tld文件,用于描述标…

    Java 2023年6月15日
    00
  • jsp-解决文件上传后重启Tomcat时文件自动删除问题

    当使用Java Servlet和JSP技术接收文件上传时,有时候文件会在重启Tomcat服务器后自动删除,这种现象在Tomcat的上下文被卸载并重新加载时会发生。这个问题可以通过修改Tomcat的配置文件,或更改文件上传时的目录路径来解决。接下来,将详细讲解如何解决这个问题。 方案一:修改Tomcat的配置文件 打开Tomcat的conf/server.xm…

    Java 2023年6月15日
    00
  • 利用MyBatis实现条件查询的方法汇总

    关于“利用MyBatis实现条件查询的方法汇总”的完整攻略,可以从以下几个方面进行讲解。 1. MyBatis基本查询 MyBatis的基本查询操作使用select标签,通过where子句编写查询条件,具体示例如下所示: <!– 整合mybatis –> <select id="selectUser" paramet…

    Java 2023年5月20日
    00
  • 搭建SSH时的思考和遇到的几个问题的解决方法

    下面是关于搭建SSH时思考和遇到的几个问题的完整攻略。 背景 SSH是Secure Shell的缩写,是一种安全的网络协议,用于远程登录Linux服务器及远程执行Linux命令。搭建SSH服务后,可以在终端使用ssh命令直接登录Linux服务器,无需在物理终端上直接操作。搭建SSH服务对于Linux技术爱好者和系统管理员非常重要。 思考 在搭建SSH服务时需…

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