druid在spring boot中非开箱即用,必须显式引入匹配版本的starter、配置spring.datasource.type、启用webstatfilter与statviewservlet,并正确设置filters和连接参数,否则监控页无法打开或数据为空。

Druid 连接池在 Spring Boot 中不是开箱即用的默认选项,必须显式引入并覆盖默认的 HikariCP。直接靠加依赖不改配置,大概率会 fallback 到 Hikari,监控页打不开、参数不生效——这是最常踩的坑。
确认 druid-spring-boot-starter 与 Spring Boot 版本兼容
Spring Boot 2.x(如 2.7.x)用 druid-spring-boot-starter 1.1.x ~ 1.2.18 均可;Spring Boot 3.x 必须用 druid-spring-boot-3-starter(注意 artifactId 不同),否则启动报 ClassNotFoundException: jakarta.servlet.Filter。
- Boot 3.2+ 推荐用
com.alibaba.druid:druid-spring-boot-3-starter:1.3.0 - 别混用
druid-spring-boot-starter和druid-spring-boot-3-starter,Maven 会冲突 -
mysql-connector-java在 Boot 3 中已弃用,必须换为mysql:mysql-connector-j(8.0.33+)
application.yml 中必须显式指定 type 和 driver-class-name
Spring Boot 自动配置不会主动识别 Druid,spring.datasource.type 是硬性开关。漏写这行,druid.* 下的所有配置全被忽略。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
datasource.druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
filters: stat,wall,log4j
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-
validation-query必须是 MySQL 能执行的语句,SELECT 1比select 'x'更稳妥(尤其 MySQL 8+ strict mode) -
filters中stat是监控基础,wall是 SQL 防火墙,log4j用于日志输出,缺一不可 -
connection-properties写在druid下级,不是spring.datasource同级
启用 Druid 监控页面需两组 servlet/filter 注册
只配 stat-view-servlet 不够,WebStatFilter 也得启用,否则 SQL 列表为空、实时数据不刷新。
spring:
datasource.druid:
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /druid/*
allow: 127.0.0.1
deny:
reset-enable: true
login-username: admin
login-password: admin
-
url-pattern必须严格匹配:filter 是/*,servlet 是/druid/*,顺序不能反 -
exclusions里必须包含/druid/*,否则监控页自身请求会被 filter 拦截,导致空白或 404 - 若部署在 Nginx 后,且启用了 gzip,需在 Nginx 配置中排除
/druid/路径,否则 JS/CSS 加载失败
MySQL 8+ 连接参数容易遗漏 serverTimezone
不加 serverTimezone 参数,启动时可能不报错,但运行时查出的 datetime 字段值会偏移 8 小时(JVM 默认 UTC,MySQL 默认系统时区),且 Druid 的连接验证会频繁失败。
- 推荐显式设为
serverTimezone=Asia/Shanghai,不要用GMT%2B8或CST(有歧义) -
useSSL=false可加可不加,但本地开发建议加上,避免证书警告干扰 -
allowPublicKeyRetrieval=true在 MySQL 8.0.28+ 启用 caching_sha2_password 认证时必需
真正容易被忽略的是:Druid 的 filters 初始化发生在 DataSource 构建之后,如果 log4j 依赖缺失或版本不匹配(比如用了 log4j2 但配置写了 log4j),整个 stat 功能会静默失效——页面能打开,但 SQL 列表永远为空,且无任何错误日志。











