Druid 是阿里巴巴开源的数据库连接池,兼具连接池管理、SQL 监控、SQL 防火墙、Web 监控等核心功能,是 Java 生态中主流的高性能数据源。相比 Spring Boot 默认的 HikariCP,Druid 更适合需要可视化监控、安全防护的生产环境。
在 pom.xml 文件中添加 Druid 官方适配 Spring Boot 的 Starter 依赖,该依赖自动整合了连接池、监控、配置绑定等功能:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.28</version>
</dependency>补充说明
无需手动排除默认数据源 HikariCP,starter 会自动适配替换;
版本可根据 Spring Boot 版本选择兼容版,1.2.28 为稳定通用版本。
在 application.yml 中配置数据库核心连接信息,替换原有默认数据源配置,适配 MySQL 8.0 + 版本:
spring:
datasource:
druid:
# 数据库连接地址,追加时区、SSL 等必要参数
url: jdbc:mysql://localhost: 3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
# 数据库用户名
username: root
# 数据库密码
password: 123456
# MySQL 8.0 + 驱动类,低版本可使用 com.mysql.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver优化连接池性能参数,控制连接数量、空闲时间、校验规则,避免连接泄漏、连接耗尽等问题,所有参数均为生产环境推荐配置:
spring:
datasource:
druid:
# 初始化连接数
initial-size: 10
# 最大活跃连接数
max-active: 20
# 最小空闲连接数
min-idle: 1
# 获取连接的最大等待时间,单位:毫秒
max-wait: 60000
# 空闲连接校验的时间间隔,单位:毫秒
time-between-eviction-runs-millis: 60000
# 连接最小空闲时间,单位:毫秒
min-evictable-idle-time-millis: 300000
# 空闲时是否校验连接有效性
test-while-idle: true
# 获取连接时是否校验有效性
test-on-borrow: true
# 归还连接时是否校验有效性
test-on-return: false
# 开启预处理语句池
pool-prepared-statements: true
# 预处理语句最大缓存数
max-open-prepared-statements: 20
# 连接有效性校验 SQL
validation-query: SELECT 1
# 校验超时时间,单位:秒
validation-query-timeout: 500
# 过滤器配置:stat=监控统计,wall=SQL 防火墙
filters: stat,wall核心参数
Druid 提供可视化 Web 监控页面,无需额外监控组件,通过配置即可开启,无需强制依赖 Actuator(Actuator 为 Spring Boot 应用监控,与 Druid 监控独立)。
在 application.yml 中添加监控核心配置,设置登录账号、访问路径:
spring:
datasource:
druid:
stat-view-servlet:
# 开启 Druid 监控面板
enabled: true
# 监控面板访问路径
url-pattern: /druid/*
# 允许重置监控数据
reset-enable: true
# 监控面板登录用户名
login-username: admin
# 监控面板登录密码
login-password: admin
# 允许访问的 IP,默认所有 IP 可访问
allow: 127.0.0.1补充 Web 请求监控、Spring 组件监控,完善监控维度:
spring:
datasource:
druid:
# Web 监控过滤器
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.css,/druid/*"
# Spring 监控
aop-patterns: com.lusifer.boot.service.*,com.lusifer.boot.mapper.*创建 RESTful 接口控制器,用于触发数据库操作,生成监控数据:
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping
public int createUser(@RequestBody User user) {
return userService.create(user.getName(), user.getAge());
}
@GetMapping("/{name}")
public List<User> getByName(@PathVariable String name) {
return userService.getByName(name);
}
@DeleteMapping("/{name}")
public int deleteByName(@PathVariable String name) {
return userService.deleteByName(name);
}
@GetMapping("/count")
public int getAllUsersCount() {
return userService.getAllUsers();
}
@DeleteMapping("/all")
public int deleteAllUsers() {
return userService.deleteAllUsers();
}
}启动 Spring Boot 应用,访问 Druid 监控面板地址:http://localhost: 8080/druid/

输入配置的登录账号 admin 和密码 admin,即可进入监控首页:

实时展示连接池配置、连接使用状态、活跃连接数、空闲连接数等核心指标,用于排查连接池瓶颈:

展示应用执行的所有 SQL 语句,包含执行次数、执行耗时、读取行数、更新行数等关键数据,是性能优化的核心依据。

监控面板将 SQL 执行时间分为 8 个区间统计,直观反映 SQL 性能分布:
0 - 1 毫秒:极速执行
1 - 10 毫秒:快速执行
10 - 100 毫秒:普通执行
100 - 1000 毫秒:慢查询
1000 - 10000 毫秒:严重慢查询
10000 - 100000 毫秒:异常耗时
100000 - 1000000 毫秒:极端耗时
1000000 毫秒以上:执行超时
同时支持 执行 + RS 时分布 统计,合并 SQL 执行时间与结果集处理时间,精准定位大数据量返回导致的性能问题。
用于 SQL 安全防护,统计表访问频率、拦截非法 SQL、防御 SQL 注入攻击:

需在 filters 中添加 wall 参数(已在连接池配置中完成):
spring:
datasource:
druid:
filters: stat,wall过滤器说明
stat:开启 SQL 监控统计,必选;
wall:开启 SQL 防火墙,防御注入攻击,生产环境必开;
log4j2:输出 Druid 日志,按需开启。
监控权限控制 生产环境必须配置 allow 限制访问 IP,禁止公网访问监控面板。
慢查询监控 可配置慢查询阈值,自动记录执行超时的 SQL:
spring:
datasource:
druid:
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500监控面板账号密码使用强密码,限制内网访问;
max-active 根据业务并发量调整,避免过大导致数据库压力过高;
必须开启 wall 过滤器,防范 SQL 注入风险;
定期清理监控数据,避免内存占用过高。
Druid Starter 可一键替换默认数据源,自动整合连接池与监控功能;
核心配置分为基础连接、连接池参数、监控面板三部分,参数需贴合业务场景调整;
可视化监控支持 SQL 性能分析、连接池管理、SQL 安全防护,是生产环境必备能力;
生产环境需做好权限控制、慢查询监控、防火墙开启,保障数据源安全稳定。