跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何在Java中配置Druid数据库连接池环境_Java性能优化解析

Druid连接池初始化失败主因是依赖缺失或版本冲突,非Spring项目需显式引入com.alibaba:druid(≥1.2.20),Spring Boot优先用druid-spring-boot-starter并配置spring.datasource.type;参数错配致卡死,maxTotal替代maxActive,maxWait须设正整数,testOnBorrow慎用;Hikari默认覆盖Druid,需显式指定type或加@Primary;监控页404因Servlet注册不当、allow未配置或Security拦截,须正确注册StatViewServlet并放行路径。 Druid连接池初始化失败:
ClassNotFoundException
或
NoClassDefFoundError
常见于 Maven 依赖没对齐或版本冲突。Druid 不是 JDK 自带组件,必须显式引入;但很多人只加了
druid-spring-boot-starter
,却在非 Spring 环境下手动 new DruidDataSource,结果类加载器找不到核心类。 纯 Java(非 Spring)项目,必须添加
com.alibaba:druid
依赖,且版本建议选
1.2.20
及以上(修复了 JDK 17+ 的部分反射问题) Spring Boot 2.7+ 项目,优先用
druid-spring-boot-starter
,它会自动配置
DruidDataSource
,但需确认
spring.datasource.type
没被误设为
com.zaxxer.hikari.HikariDataSource
如果用了 Shading(如打包进 fat jar),检查
META-INF/MANIFEST.MF
是否意外排除了
druid
相关包路径 配置项写错导致连接卡死:
maxActive
、
maxWait
、
testOnBorrow
的实际影响 这些参数名字看着像“限制”,其实控制的是阻塞行为和健康检查时机,写错直接导致应用启动 hang 住、或运行中大量线程 WAITING 在
getConnection()
上。
maxActive
(已废弃,应改用
maxTotal
):旧版 Druid 中若设为 0,池会无限创建连接,很快耗尽 DB 连接数;新版请统一用
maxTotal
maxWait
默认 -1(无限等待),线上必须设为正整数(如
3000
),否则一个慢查询拖垮整个服务
testOnBorrow
设为
true
时,每次取连接都执行
validationQuery
(如
SELECT 1
),高并发下 DB 压力翻倍;生产环境更推荐
testWhileIdle
+
timeBetweenEvictionRunsMillis
Spring Boot 中
DruidDataSource
不生效:被 Hikari 覆盖 Spring Boot 2.x 默认内嵌 HikariCP,即使你写了
@Bean DruidDataSource
,只要
spring.datasource.url
存在,Boot 仍会优先创建 Hikari 实例——你的 Bean 被忽略,日志里也几乎不报错。 确认
application.yml
中是否含
spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
检查是否有其他 starter(如
mybatis-spring-boot-starter
)间接拉入 Hikari 依赖;可执行
mvn dependency:tree | grep hikari
验证 若手动定义
@Bean
,务必加上
@Primary
注解,并确保该类不在
@ComponentScan
范围外 监控页面 404 或白屏:
StatViewServlet
配置陷阱 Druid 内置的监控页(
/druid
)不是开箱即用,URL 映射、过滤器顺序、权限控制三者稍有偏差就返回 404 或空响应。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; Servlet 注册必须用
ServletRegistrationBean
(Spring Boot 1.x)或
ServletWebServerFactoryCustomizer
(2.x+),不能只靠
@ServletComponentScan
—— 后者在某些容器(如 Undertow)下不生效
allow
参数默认为空,意味着拒绝所有 IP;需显式设为
allow: 127.0.0.1,192.168.1.0/24
,否则连本地都打不开 若项目用了 Spring Security,需放行
/druid/**
路径,且确保
DruidWebStatFilter
在 SecurityFilterChain 之前注册 Druid 的配置自由度高,但每个开关背后都有明确的线程模型和资源生命周期约束。最容易被忽略的是连接泄漏检测(
removeAbandonedOnBorrow
已废弃,必须用
removeAbandonedOnMaintenance
+
removeAbandonedTimeoutMillis
)和日志级别——
druid.stat.mergeSql=true
开启后,慢 SQL 日志才真正可用。

相关文章