核心说明:Druid 是阿里巴巴开源的高性能数据库连接池,兼具连接池管理、SQL监控、防SQL注入、日志记录等核心功能,若依(RuoYi)框架(含RuoYi-Vue、RuoYi-Cloud)已默认集成 Druid,核心配置集中在 application-druid.yml 文件,同时需配合 application.yml 进行环境关联,以下是完整配置解析、实操步骤及常见问题,适配若依框架全版本,兼顾入门使用与进阶优化。
若依最新源码下载:
https://gitee.com/ruoyieleadmin/ruoyi-ele-admin
一、Druid 配置前置说明(必看)
1. 配置文件位置
若依框架的 Druid 配置采用“主配置+分配置”模式,核心文件路径如下(以若依单体版为例):
- 主配置文件:
src/main/resources/application.yml—— 关联 Druid 分配置,指定环境、数据源类型等基础参数; - Druid 核心配置文件:
src/main/resources/application-druid.yml—— 存放 Druid 连接池、监控、过滤等全部核心配置,是配置的核心文件。
2. 依赖说明(无需手动导入)
若依框架已默认引入 Druid 相关依赖(含连接池、监控模块),在 pom.xml 中可查看,无需手动添加,核心依赖如下:
<!-- Druid 连接池依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.16</version> <!-- 若依默认版本,可按需升级 --> </dependency>
3. 核心配置逻辑
若依框架通过 DruidConfig 配置类(路径:com.ruoyi.framework.config.DruidConfig)统一管理 Druid 连接池,该类会读取 application-druid.yml 中的配置,初始化 Druid 数据源、监控 servlet、过滤规则等,实现“配置即生效”,无需额外编写代码。
二、核心配置文件完整解析(application-druid.yml)
以下是若依框架默认 application-druid.yml 完整配置,按“数据源基础配置、连接池参数、监控配置、过滤配置”分类解析,标注必配项、可选项及优化建议,所有配置均可直接复制使用并按需修改。
(一)基础数据源配置(必配,核心)
用于配置数据库连接信息,关联数据库类型(MySQL、Oracle等),是 Druid 连接池的基础,若依框架支持主从数据源配置,以下以 MySQL 为例(最常用):
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # 固定指定 Druid 数据源类型 druid: # 主数据源配置(若依默认单数据源,主从配置可新增 slave 节点) master: url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root # 数据库用户名(替换为自己的数据库账号) password: 123456 # 数据库密码(替换为自己的数据库密码) driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 8.0+ 驱动类(5.7版本为 com.mysql.jdbc.Driver) # 从数据源配置(可选,主从分离时启用) # slave: # url: jdbc:mysql://localhost:3306/ruoyi_slave?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # username: root # password: 123456 # driver-class-name: com.mysql.cj.jdbc.Driver
关键说明:
- url 参数:需替换
localhost:3306为实际数据库地址和端口,ruoyi为若依框架默认数据库名,若使用 Oracle、SQL Server,需修改 url 格式和 driver-class-name; - username/password:必须替换为实际数据库的账号密码,否则无法连接数据库;
- 主从分离:若需实现主从分离(读写分离),启用 slave 节点配置,若依框架会自动实现“写主库、读从库”的逻辑,无需额外开发。
(二)Druid 连接池核心参数(必配,性能优化关键)
用于配置连接池的连接数量、超时时间、检测规则等,直接影响系统性能,以下是若依默认配置+优化建议,适配不同并发场景:
spring: datasource: druid: # 连接池通用配置(主从数据源共用,也可单独配置到 master/slave 节点) initial-size: 5 # 初始化连接数(默认5,建议:低并发5-10,高并发10-20) min-idle: 10 # 最小空闲连接数(默认10,确保空闲时仍有连接可用,避免频繁创建连接) max-active: 20 # 最大活跃连接数(默认20,核心参数!需根据并发量调整,建议不超过数据库最大连接数) max-wait: 60000 # 获取连接的最大等待时间(单位:毫秒,默认60000,超时则抛出异常) time-between-eviction-runs-millis: 60000 # 连接检测时间间隔(单位:毫秒,默认60000,定期检测空闲连接) min-evictable-idle-time-millis: 300000 # 连接最小空闲时间(单位:毫秒,默认300000,超过则回收) validation-query: SELECT 1 FROM DUAL # 连接有效性检测SQL(MySQL/Oracle通用,无需修改) test-while-idle: true # 空闲时检测连接有效性(建议开启,避免无效连接) test-on-borrow: false # 获取连接时检测(不建议开启,会影响性能) test-on-return: false # 归还连接时检测(不建议开启,会影响性能) pool-prepared-statements: true # 开启预编译语句池(建议开启,提升SQL执行效率) max-pool-prepared-statement-per-connection-size: 20 # 每个连接的预编译语句最大数量
优化建议(重点):
- 高并发场景(如多用户同时操作):调整
max-active: 50、min-idle: 20,确保足够的活跃连接,避免连接不足导致超时; - 低并发场景(如后台管理系统):保持默认配置即可,无需过度调整,避免资源浪费;
- 连接泄漏排查:若出现“连接耗尽”异常,可开启
log-abandoned: true(添加到上述配置中),打印连接泄漏日志,定位问题代码。
(三)Druid 监控配置(推荐配置,便于运维)
Druid 自带监控面板,可实时查看连接池状态、SQL执行情况、慢SQL等,若依框架已默认配置监控,只需启用并调整访问权限即可,配置如下:
spring: datasource: druid: # 监控配置 stat-view-servlet: enabled: true # 启用监控面板(必设为true,否则无法访问) url-pattern: /druid/* # 监控面板访问路径(默认/druid/*,可自定义) login-username: admin # 监控面板登录用户名(自定义,建议修改,避免默认账号泄露) login-password: admin # 监控面板登录密码(自定义,建议修改) reset-enable: false # 是否允许重置监控数据(默认false,不建议开启) # 监控面板访问白名单(允许访问的IP,多个用逗号分隔,*表示允许所有IP) allow: 127.0.0.1,192.168.1.0/24 # 监控面板访问黑名单(禁止访问的IP,优先级高于白名单) deny: 192.168.1.100 # 监控过滤配置(采集SQL执行信息) web-stat-filter: enabled: true # 启用web监控过滤 url-pattern: /* # 监控所有请求 exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 排除静态资源和监控自身路径
监控面板使用方法:
- 启动若依项目,访问地址:
http://localhost:8080/druid/index.html(端口需替换为项目实际端口); - 输入配置的 login-username 和 login-password 登录,即可查看核心监控数据:
- 数据源:查看连接池的初始化、空闲、活跃连接数,以及连接创建/销毁情况;
- SQL监控:查看所有执行的SQL语句、执行时间、行数,可筛选慢SQL(默认执行时间>1000ms);
- Web应用:查看请求路径、访问次数、耗时等;
- 防御SQL注入:查看被拦截的SQL注入请求,Druid 会自动拦截常见的SQL注入语句。
注意:生产环境中,建议修改监控面板的用户名密码,并限制访问IP(避免外部访问),提升安全性。
(四)过滤配置(可选,安全+性能优化)
Druid 提供多种过滤器,用于防SQL注入、日志记录、编码处理等,若依框架默认启用核心过滤器,配置如下:
spring: datasource: druid: filters: stat,wall,log4j2 # 启用的过滤器(stat:监控统计,wall:防SQL注入,log4j2:日志记录) # 过滤器详细配置(可选,按需调整) filter: stat: slow-sql-millis: 1000 # 慢SQL阈值(单位:毫秒,默认1000,超过则记录日志) log-slow-sql: true # 记录慢SQL日志(建议开启,便于排查性能问题) wall: enabled: true # 启用防SQL注入(必开启,提升系统安全性) config: multi-statement-allow: false # 禁止多语句执行(防止SQL注入批量操作) none-base-statement-allow: false # 禁止非基础语句执行
关键说明:
- filters 配置:多个过滤器用逗号分隔,stat 和 wall 是必配的,log4j2 需确保项目引入 log4j2 依赖(若依默认引入);
- wall 过滤器:核心用于防SQL注入,禁止多语句执行、非基础语句执行,避免恶意SQL攻击;
- 慢SQL配置:通过
slow-sql-millis定义慢SQL,开启log-slow-sql后,慢SQL会记录到日志中,便于定位性能瓶颈。
三、application.yml 关联配置(必配)
需在 application.yml 中指定启用 Druid 配置,关联 application-druid.yml,核心配置如下(若依默认已配置,无需修改,仅作说明):
spring: # 环境配置(dev/test/prod),需确保与 application-druid.yml 环境一致 profiles: active: dev # 启用开发环境,对应 application-druid.yml 中的环境配置 # 数据源基础关联(若依框架会自动读取 application-druid.yml 中的 Druid 配置) datasource: type: com.alibaba.druid.pool.DruidDataSource # 与 application-druid.yml 中保持一致
说明:若需区分开发、测试、生产环境,可创建 application-druid-dev.yml、application-druid-prod.yml,分别配置不同环境的数据库信息和连接池参数,通过spring.profiles.active 切换环境。
四、常见问题及解决方案(重点)
1. 数据库连接失败(最常见)
- 报错信息:
Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.DruidDataSource$CreateConnectionException: create connection SQLException; - 解决方案:
- 检查
application-druid.yml中 url、username、password 是否正确,数据库地址和端口是否可达; - 检查数据库服务是否启动,是否允许当前IP访问(如MySQL的防火墙、权限设置);
- 检查 driver-class-name 是否与数据库版本匹配(MySQL 8.0+ 需用
com.mysql.cj.jdbc.Driver)。
2. 监控面板无法访问(404/403)
- 报错信息:404(路径错误)、403(权限拒绝);
- 解决方案:
- 检查
stat-view-servlet.enabled是否设为 true; - 检查访问路径是否正确(默认
/druid/index.html),若修改了 url-pattern,需对应调整访问路径; - 403 错误:检查 allow/deny 配置,确保当前访问IP在白名单中,或设置 allow: "*"(生产环境不建议);
- 若依框架开启了 Shiro 权限控制,需在 Shiro 配置中放行
/druid/**路径,避免被拦截。
3. 连接池耗尽(超时)
- 报错信息:
wait millis 60000, active 20, maxActive 20(连接数达到最大值); - 解决方案:
- 提升
max-active参数(建议不超过数据库最大连接数,MySQL默认最大连接数为151); - 检查代码中是否存在连接泄漏(如未关闭 Connection、事务未提交),开启
log-abandoned: true排查泄漏代码; - 优化SQL执行效率,减少慢SQL,避免连接长时间被占用;
- 启用连接池预热:在 DruidConfig 中添加预热代码,提前初始化连接,避免高峰期连接不足。
4. 慢SQL过多,系统性能卡顿
- 现象:系统响应慢,监控面板中慢SQL数量多;
- 解决方案:
- 通过 Druid 监控面板定位慢SQL(SQL监控页,按执行时间排序);
- 使用
EXPLAIN分析慢SQL执行计划,优化查询逻辑(如添加索引、避免全表扫描、简化JOIN操作); - 调整
slow-sql-millis阈值,区分正常慢SQL和异常慢SQL,重点优化异常慢SQL; - 开启预编译语句池(
pool-prepared-statements: true),提升SQL执行效率。
五、进阶优化建议(生产环境必备)
- 主从分离:高并发场景下,配置主从数据源(master写、slave读),减少主库压力,若依框架已支持,只需在
application-druid.yml中配置 slave 节点即可; - 连接池监控告警:结合监控面板数据,设置告警阈值(如 activeCount 持续接近 maxActive),及时发现性能瓶颈;
- 定期巡检:每周查看 Druid 监控面板,排查慢SQL、连接泄漏等问题,建立性能基线,便于及时发现异常;
- 版本升级:定期升级 Druid 版本(若依默认版本可升级至最新稳定版),修复已知bug,提升性能和安全性;
- 密码加密:生产环境中,数据库密码不建议明文存储,可使用 Druid 提供的密码加密工具,加密后配置到
application-druid.yml中,提升安全性。
六、总结
若依框架的 Druid 配置核心是 application-druid.yml,重点关注“基础数据源配置、连接池参数、监控配置”三大模块,无需额外开发,配置完成后即可生效。入门阶段,可直接使用若依默认配置,替换数据库账号密码即可;生产环境中,需根据并发量调整连接池参数、优化监控配置、开启安全防护,确保系统稳定高效运行。
补充:若使用若依微服务版(RuoYi-Cloud),Druid 配置逻辑与单体版一致,核心配置文件位于 gateway 或各业务模块的 application-druid.yml 中,配置方式完全相同。