若依框架(RuoYi)是一款基于Spring Boot和Spring Cloud的快速开发平台,它提供了许多开箱即用的功能模块。在企业级应用中,SQL性能优化是一个重要环节,而Druid作为阿里巴巴开源的数据库连接池组件,不仅提供了高性能的连接池管理功能,还内置了强大的SQL监控能力。
本文将详细介绍如何在若依框架中集成Druid并使用其监控功能来分析SQL执行情况。
Druid 是一个 Java 实现的数据库连接池,同时也是一个数据源代理工具。它的主要特性包括:
在若依框架中,我们可以利用 Druid 的监控功能来分析 SQL 执行效率,定位性能瓶颈。
若依框架默认使用 HikariCP 作为数据库连接池。如果需要替换为 Druid,首先需要修改 pom.xml
文件,添加以下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
然后移除或注释掉 HikariCP 的相关依赖。
在 application.yml
或 application.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 为慢查询。为了方便查看 SQL 执行情况,Druid 提供了一个内置的监控页面。我们可以通过以下步骤启用它:
创建一个配置类,用于注册 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;
}
}
启动项目后,访问 http://localhost:8080/druid
即可进入 Druid 监控页面。输入配置的用户名和密码即可登录。
在 Druid 监控页面中,可以查看以下信息:
SQL 执行统计:
慢查询列表:
连接池状态:
通过这些数据,我们可以快速定位性能问题,优化 SQL 查询逻辑。
慢查询通常是由于索引缺失、复杂查询或不当的分页操作引起的。以下是常见的优化建议:
SELECT *
,只查询必要的字段。Druid 提供了 WallFilter
插件,可以有效防止 SQL 注入攻击。在配置文件中启用 filters: stat,wall,log4j
即可开启此功能。
通过 log4j
插件,Druid 可以将 SQL 执行日志输出到指定文件中。这对于排查问题非常有帮助。
通过在若依框架中集成 Druid,我们可以轻松实现对 SQL 执行情况的监控和分析。结合 Druid 提供的强大功能,开发者可以更高效地定位和解决性能问题,从而提升系统的整体性能。