Druid 是阿里开源的 JDBC 连接池,需配合 mysql-connector-j 驱动使用,通过 DruidDataSource 管理 MySQL 连接;Spring Boot 项目引入 druid-spring-boot-starter 和 mysql-connector-j,配置 url、用户名密码及关键参数如 initialSize、maxPoolSize、testOnBorrow 等,并启用监控页验证连接有效性;MySQL 8.0+ 需用 8.0.28+ 驱动并设置 allowPublicKeyRetrieval=true。

Druid 连接池怎么配进 MySQL 项目
Druid 是阿里开源的高性能 JDBC 连接池,不是 MySQL 自带组件,也不能直接“用 MySQL 的 Druid”,而是用 DruidDataSource 替代 HikariCP 或 BasicDataSource 来管理 MySQL 数据库连接。核心是:它不改 MySQL 协议,只接管连接的创建、复用、监控和回收。
常见错误是把 druid-spring-boot-starter 当成 MySQL 驱动装,结果启动报 ClassNotFoundException: com.mysql.cj.jdbc.Driver——Druid 不提供驱动,mysql-connector-java(或新版 mysql-connector-j)必须单独引入。
- Spring Boot 项目需同时声明
mysql-connector-j和druid-spring-boot-starter - 非 Spring 项目则直接 new
DruidDataSource(),手动 seturl、username、password、driverClassName -
url必须是标准 MySQL JDBC 格式,例如:jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=UTC
关键参数怎么设才不翻车
Druid 默认配置偏保守,直连生产 MySQL 容易出现连接超时、空闲释放过早、SQL 执行慢无感知等问题。几个高频出错的参数:
-
initialSize:默认 0,应用刚启动时没预热连接,首请求可能卡住;建议设为 2–5 -
minIdle和maxActive(新版叫maxOpenPreparedStatements已废弃,实际控制并发连接数的是maxPoolSize):若minIdle太低(如 0),连接空闲 60 秒后被回收,下次来又要重建;若maxPoolSize小于业务峰值并发,会排队等连接,表现像数据库慢 -
testOnBorrow:默认 false,从池里取连接时不检测有效性,遇到 MySQL 主从切换或网络闪断,可能拿到失效连接;建议设 true + 配合validationQuery=SELECT 1 -
phyTimeoutMillis:物理连接最大存活时间,避免长连接被 MySQL 的wait_timeout中断导致异常;建议设略小于 MySQL 的wait_timeout值(如 MySQL 设 28800,这里设 28000)
怎么查 Druid 是否真在用、连的是哪个 MySQL 实例
光看启动日志不够,得验证运行时行为。Druid 内置监控页(默认 /druid)是最直接方式,但需显式开启:
spring:
datasource:
druid:
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: admin访问 http://localhost:8080/druid 后,在「数据源」页能看到当前连接的 url、活跃连接数、SQL 执行统计;点「SQL 监控」可查慢 SQL 和执行堆栈。注意:该页面暴露敏感信息,生产务必关掉或加 IP 白名单。
另一个验证点是日志——开启 com.alibaba.druid.pool.DruidDataSource 的 DEBUG 日志,能看见类似 create connection, url: jdbc:mysql://10.0.1.5:3306/mydb 的输出,确认连的是目标实例而非本地测试库。
MySQL 8.0+ 和 Druid 兼容要注意啥
MySQL 8.0 默认启用 caching_sha2_password 插件,而老版本 Druid(1.1.10 之前)依赖的 mysql-connector-java 5.x 不支持该认证方式,会报 Unknown initial character set index '255' received from server 或 Public Key Retrieval is not allowed。
- 必须升级
mysql-connector-j到 8.0.28+(推荐 8.0.33) - URL 中显式指定
serverTimezone和allowPublicKeyRetrieval=true,例如:jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false - Druid 本身无需升级,但若用
druid-spring-boot-starter,建议 >= 1.2.18,它对新驱动适配更稳
另外,MySQL 8.0 的 information_schema.PROCESSLIST 显示的连接用户是 Druid 配置的 username,不是操作系统用户——这点排查权限问题时容易误判。










