若依框架中使用Druid监控SQL执行情况

2025-06发布2次浏览

若依框架(RuoYi)是一款基于Spring Boot和Spring Cloud的快速开发平台,它提供了许多开箱即用的功能模块。在企业级应用中,SQL性能优化是一个重要环节,而Druid作为阿里巴巴开源的数据库连接池组件,不仅提供了高性能的连接池管理功能,还内置了强大的SQL监控能力。

本文将详细介绍如何在若依框架中集成Druid并使用其监控功能来分析SQL执行情况。


一、Druid简介

Druid 是一个 Java 实现的数据库连接池,同时也是一个数据源代理工具。它的主要特性包括:

  1. 高性能:Druid 提供了高效的数据库连接池管理。
  2. 监控功能:支持对 SQL 的执行时间、慢查询、命中率等进行监控。
  3. 扩展性强:可以通过插件机制实现更多功能,例如日志记录、SQL 防注入等。

在若依框架中,我们可以利用 Druid 的监控功能来分析 SQL 执行效率,定位性能瓶颈。


二、在若依框架中集成Druid

1. 引入依赖

若依框架默认使用 HikariCP 作为数据库连接池。如果需要替换为 Druid,首先需要修改 pom.xml 文件,添加以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

然后移除或注释掉 HikariCP 的相关依赖。

2. 配置文件设置

application.ymlapplication.properties 中配置 Druid 数据源:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      max-active: 20
      min-idle: 5
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      validation-query: SELECT 1 FROM DUAL
      test-on-borrow: false
      test-on-return: false
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      filters: stat,wall,log4j
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

说明:

  • filters: stat,wall,log4j 表示启用统计功能、防火墙功能和日志功能。
  • druid.stat.mergeSql=true 表示合并相同 SQL。
  • druid.stat.slowSqlMillis=5000 表示定义超过 5 秒的 SQL 为慢查询。

3. 启用 Druid 监控页面

为了方便查看 SQL 执行情况,Druid 提供了一个内置的监控页面。我们可以通过以下步骤启用它:

(1) 配置后端

创建一个配置类,用于注册 Druid 的监控 Servlet 和 Filter:

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DruidConfig {

    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        // 设置登录用户名和密码
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
        // 禁止 IP 访问控制(可根据需求设置允许访问的 IP)
        servletRegistrationBean.addInitParameter("allow", "");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>(new WebStatFilter());
        // 过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
(2) 配置前端

启动项目后,访问 http://localhost:8080/druid 即可进入 Druid 监控页面。输入配置的用户名和密码即可登录。


三、分析SQL执行情况

在 Druid 监控页面中,可以查看以下信息:

  1. SQL 执行统计

    • 总计执行次数、成功次数、失败次数。
    • 平均执行时间、最大执行时间、最小执行时间。
  2. 慢查询列表

    • 列出执行时间超过阈值的 SQL。
    • 可以点击具体 SQL 查看详细信息,包括参数值和执行计划。
  3. 连接池状态

    • 当前活动连接数、最大连接数、等待队列长度等。

通过这些数据,我们可以快速定位性能问题,优化 SQL 查询逻辑。


四、扩展讨论

1. 慢查询优化

慢查询通常是由于索引缺失、复杂查询或不当的分页操作引起的。以下是常见的优化建议:

  • 确保关键字段已建立索引。
  • 避免使用 SELECT *,只查询必要的字段。
  • 对于大数据量表,考虑分区表或分库分表策略。

2. SQL 防注入

Druid 提供了 WallFilter 插件,可以有效防止 SQL 注入攻击。在配置文件中启用 filters: stat,wall,log4j 即可开启此功能。

3. 日志记录

通过 log4j 插件,Druid 可以将 SQL 执行日志输出到指定文件中。这对于排查问题非常有帮助。


五、总结

通过在若依框架中集成 Druid,我们可以轻松实现对 SQL 执行情况的监控和分析。结合 Druid 提供的强大功能,开发者可以更高效地定位和解决性能问题,从而提升系统的整体性能。