2026/1/9 22:40:45
网站建设
项目流程
网站前台设计及开发是做什么的,企业网站推荐,做网站台式还是笔记本,vps服务器购买阿里巴巴 Druid 连接池#xff1a;从入门到生产级配置
一、介绍
Druid#xff08;德鲁伊#xff09;是阿里巴巴开源的高性能数据库连接池#xff0c;不仅替代了传统的 DBCP、C3P0 等连接池#xff0c;还集成了监控、统计、防 SQL 注入、加密 等核心功能#xff0c;是目…阿里巴巴 Druid 连接池从入门到生产级配置一、介绍Druid德鲁伊是阿里巴巴开源的高性能数据库连接池不仅替代了传统的 DBCP、C3P0 等连接池还集成了监控、统计、防 SQL 注入、加密 等核心功能是目前 Java 生态中最主流的数据库连接池之一。特性高性能基于异步处理和优化的连接复用机制性能远超 DBCP/C3P0接近甚至优于 HikariCPSpring Boot 默认连接池全面的监控能力内置监控页面可实时查看连接池状态、SQL 执行情况、慢查询等安全防护支持 SQL 防火墙防注入、数据库密码加密存储丰富的扩展功能支持扩展插件如统计插件、日志插件、加密插件稳定性经过阿里海量业务场景验证容错性和稳定性强兼容性兼容 JDBC 规范可无缝替换其他连接池。工作流程有无否是初始化连接池缓存初始连接等待下一次业务请求有空闲连接?复用空闲连接使用连接创建新连接归还连接至池空闲检测(回收无效/超时连接)应用是否关闭?销毁所有连接二、核心功能模块模块作用连接池核心管理数据库连接的创建、复用、销毁控制最大 / 最小连接数、超时时间等监控统计StatFilter统计 SQL 执行次数、耗时、慢查询连接池使用率等SQL 防火墙WallFilter拦截恶意 SQL如注入语句支持 MySQL/Oracle 等多数据库方言日志插件LogFilter记录 SQL 执行日志支持不同日志框架Log4j/Logback加密解密ConfigFilter加密数据库密码避免配置文件明文存储三、核心配置参数常用Druid 的配置通过druid.properties或 Spring 配置文件指定核心参数如下参数名说明url数据库连接地址如 jdbc:mysql://localhost:3306/testusername数据库用户名password数据库密码可加密driverClassName数据库驱动类如 com.mysql.cj.jdbc.DriverinitialSize初始化连接数默认 0maxActive最大活跃连接数默认 8minIdle最小空闲连接数maxWait获取连接的最大等待时间毫秒默认 -1 表示无限制timeBetweenEvictionRunsMillis检测空闲连接的间隔时间默认 60000msminEvictableIdleTimeMillis连接最小空闲时间超过则被回收默认 300000msvalidationQuery验证连接是否有效的 SQL如 SELECT 1testWhileIdle空闲时验证连接有效性推荐 truetestOnBorrow获取连接时验证推荐 false影响性能testOnReturn归还连接时验证推荐 falsepoolPreparedStatements是否缓存 PreparedStatement默认 falsefilters启用的插件如 stat,wall,log4j四、使用方式1. 纯 Java 代码使用原生方式importcom.alibaba.druid.pool.DruidDataSource;importjavax.sql.DataSource;importjava.sql.Connection;importjava.sql.SQLException;publicclassDruidDemo{publicstaticvoidmain(String[]args)throwsSQLException{// 1. 创建 Druid 数据源DruidDataSourcedataSourcenewDruidDataSource();// 2. 配置参数dataSource.setUrl(jdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf8);dataSource.setUsername(root);dataSource.setPassword(123456);dataSource.setDriverClassName(com.mysql.cj.jdbc.Driver);// 连接池配置dataSource.setInitialSize(5);dataSource.setMaxActive(20);dataSource.setMinIdle(5);dataSource.setMaxWait(60000);dataSource.setFilters(stat,wall);// 启用统计和防火墙// 3. 获取连接try(ConnectionconndataSource.getConnection()){System.out.println(连接成功conn);}catch(SQLExceptione){e.printStackTrace();}// 4. 关闭数据源应用关闭时执行dataSource.close();}}2. Spring Boot 集成主流方式步骤 1引入依赖pom.xml!-- Druid 依赖 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.20/version!-- 推荐最新稳定版 --/dependency!-- MySQL 驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependency步骤 2配置 application.ymlspring:datasource:# Druid 配置type:com.alibaba.druid.pool.DruidDataSourcedruid:url:jdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghaiusername:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Driver# 连接池配置initial-size:5max-active:20min-idle:5max-wait:60000time-between-eviction-runs-millis:60000min-evictable-idle-time-millis:300000# 验证连接validation-query:SELECT 1test-while-idle:truetest-on-borrow:falsetest-on-return:false# 启用插件filters:stat,wall,log4j2# 监控配置web-stat-filter:enabled:trueurl-pattern:/*exclusions:*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*stat-view-servlet:enabled:trueurl-pattern:/druid/*# 监控页面登录账号密码login-username:adminlogin-password:admin# 是否允许重置统计数据reset-enable:false步骤 3访问监控页面启动 Spring Boot 应用后访问http://localhost:8080/druid输入配置的账号密码admin/admin即可查看连接池状态活跃数、空闲数、使用率SQL 执行统计执行次数、耗时、慢查询Web 应用统计请求数、耗时SQL 防火墙拦截记录。五、不同场景下的配置参数选择典型场景配置模板参数选择的方法先定核心参数再补辅助参数第一步确定max-active核心→ 不超过数据库max_connections的 70%预留管理员 / 其他应用连接补mysql的max_connections最大连接数为151第二步initial-size/min-idlemax-active的 20%-50%低并发取 20%高并发取 50%第三步max-wait匹配业务超时容忍度实时业务 30-60 秒长查询 60-120 秒第四步根据网络 / 并发调整清理间隔time-between-eviction-runs-millis。场景 1纯内部低并发后台管理系统 / 内部工具特征QPS 50SQL 执行快100ms用户量少网络稳定诉求减少资源占用简化配置保证基础可用。配置模板druid:initial-size:2# 启动仅创建2个连接降低启动开销min-idle:1# 仅保留1个空闲连接兜底max-active:10# 最大10个连接足够支撑低并发max-wait:30000# 等待30秒超时快速失败避免线程阻塞validation-query:select xvalidation-query-timeout:30test-while-idle:true# 兜底验证连接有效性keep-alive:true# 低并发下避免空闲连接失效time-between-eviction-runs-millis:60000# 60秒清理一次低频min-evictable-idle-time-millis:300000# 5分钟销毁空闲连接# 可选简化监控仅保留核心filter:stat:enabled:trueslow-sql-millis:5000# 慢SQL阈值放宽到5秒内部系统容忍度高场景 2中并发企业中台 / 常规业务系统特征QPS 100-500SQL 执行中等100-500ms偶发峰值网络较稳定诉求平衡资源与性能避免连接池满导致超时支持峰值处理。配置模板druid:initial-size:5# 启动创建5个连接应对初始请求min-idle:5# 保留5个空闲连接快速响应请求max-active:20# 最大20个连接适配MySQL默认max_connections151max-wait:60000# 等待60秒给峰值请求缓冲时间validation-query:select xvalidation-query-timeout:30test-while-idle:truekeep-alive:truetime-between-eviction-runs-millis:30000# 30秒清理一次中频min-evictable-idle-time-millis:180000# 3分钟销毁空闲连接更快释放资源# 必配连接泄露检测中台系统易出现代码不规范导致泄露remove-abandoned:trueremove-abandoned-timeout-millis:300000# 5分钟判定泄露log-abandoned:true# 必配全量SQL监控定位性能问题filter:stat:enabled:trueslow-sql-millis:2000# 2秒判定慢SQLlog-slow-sql:truemerge-sql:truewall:enabled:true# 开启SQL防火墙中台对接多系统防注入场景 3高并发电商交易 / 秒杀 / 核心接口特征:QPS 1000SQL 执行要求低延迟100ms短时间请求激增数据库性能强诉求最大化连接池吞吐量避免连接成为瓶颈保证高可用。配置模板druid:initial-size:10# 启动创建10个连接应对启动后立即到来的峰值min-idle:10# 保留10个空闲连接避免频繁创建销毁max-active:50# 最大50个连接需提前扩容数据库max_connectionsmax-wait:60000# 等待60秒峰值时容忍更长等待validation-query:select xvalidation-query-timeout:10# 验证SQL超时缩短到10秒避免阻塞test-while-idle:truetest-on-borrow:true# 高并发下临时开启获取连接验证牺牲少量性能换稳定性keep-alive:truetime-between-eviction-runs-millis:10000# 10秒清理一次高频检测失效连接min-evictable-idle-time-millis:60000# 1分钟销毁空闲连接快速释放资源# 性能优化开启PSCache复用预编译SQLpool-prepared-statements:truemax-pool-prepared-statement-per-connection-size:50# 强化监控与日志remove-abandoned:trueremove-abandoned-timeout-millis:180000# 3分钟判定泄露更严格log-abandoned:truefilter:stat:enabled:trueslow-sql-millis:1000# 1秒判定慢SQL快速发现性能问题log-slow-sql:truemerge-sql:truewall:enabled:true# 异步日志线程池优化避免日志阻塞核心业务async-logger-executor:core-size:5max-size:10max-queue-size:8192rejected-policy:CallerRunsPolicy场景 4数据库网络不稳定跨机房 / 公网连接特征:数据库与应用跨网络部署偶发网络抖动连接易失效诉求快速发现并销毁失效连接避免使用断连。配置模板druid:initial-size:3min-idle:3max-active:15max-wait:30000# 缩短等待时间网络慢时避免线程长时间阻塞validation-query:select xvalidation-query-timeout:5# 验证SQL超时5秒快速判定连接失效test-while-idle:truetest-on-borrow:true# 强制验证获取的连接核心保障keep-alive:truetime-between-eviction-runs-millis:15000# 15秒清理一次高频检测min-evictable-idle-time-millis:60000# 1分钟销毁空闲连接max-evictable-idle-time-millis:120000# 2分钟最大空闲避免长期闲置连接# 关闭PSCache网络不稳定时预编译连接易失效pool-prepared-statements:false# 增强日志便于排查网络问题filter:stat:enabled:truelog-slow-sql:trueslow-sql-millis:1000场景 5只读业务报表 / 数据查询特征:仅执行查询 SQL无写操作SQL 执行时间可能较长如报表统计诉求允许长连接持有避免误判连接泄露保证查询完成。配置模板druid:initial-size:3min-idle:2max-active:15max-wait:120000# 等待120秒适配长SQL执行validation-query:select xtest-while-idle:truekeep-alive:truetime-between-eviction-runs-millis:60000min-evictable-idle-time-millis:600000# 10分钟销毁空闲连接容忍长查询# 放宽连接泄露判定避免长查询被误判为泄露remove-abandoned:trueremove-abandoned-timeout-millis:900000# 15分钟判定泄露log-abandoned:true# 慢SQL阈值放宽报表查询本身耗时久filter:stat:enabled:trueslow-sql-millis:10000# 10秒判定慢SQLlog-slow-sql:true六、关键扩展能力密码加密避免配置文件明文存储密码通过 Druid 提供的加密工具生成密文# 生成加密密码命令行执行 Druid 工具类java -cp druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools123456# 输出privateKey、publicKey、password密文配置文件中使用密文spring:datasource:druid:password:${加密后的密码}connection-properties:config.decrypttrue;config.decrypt.key${公钥}filters:config,stat,wall# 启用 config 插件解密慢查询监控在filters中启用stat后可在监控页面查看慢查询默认超过 3 秒的 SQL也可自定义慢查询阈值spring:datasource:druid:filter:stat:slow-sql-millis:2000# 慢查询阈值2 秒log-slow-sql:true# 记录慢查询日志SQL 防火墙wall插件可拦截注入式 SQL如or 11支持自定义规则spring:datasource:druid:filter:wall:enabled:trueconfig:multi-statement-allow:false# 禁止多语句执行delete-allow:true# 允许 DELETE 语句七、与其他连接池对比特性DruidHikariCPSpring Boot 默认C3P0DBCP2性能高略低于 Hikari极高低中监控能力内置可视化监控需手动集成监控无无安全防护支持 SQL 防火墙无无无扩展能力丰富插件体系扩展少弱弱易用性高Spring Boot 集成高低中社区活跃度高阿里维护高低中八、最佳实践配置合理的连接数maxActive建议根据数据库性能和业务并发量设置如单机 MySQL 建议 20~50关闭不必要的验证testOnBorrow/testOnReturn设为 false仅保留testWhileIdle避免性能损耗启用监控和防火墙线上环境必须开启stat监控和wall防注入密码加密生产环境禁止明文存储数据库密码使用config插件加密定期清理空闲连接合理设置minEvictableIdleTimeMillis避免连接长时间空闲失效监控慢查询通过慢查询定位性能瓶颈优化 SQL 或索引。总结Druid 是功能全面、性能优异的数据库连接池尤其适合需要监控、安全防护、定制化扩展的企业级应用。在 Spring Boot 项目中结合 Druid 的监控能力可快速定位数据库性能问题是生产环境的首选连接池之一。补充Spring Boot 版本区间推荐 Druid 版本druid-spring-boot-starter最低兼容 Druid 版本说明 / 兼容风险1.5.x经典稳定版1.1.10 ~ 1.1.231.1.5适配 Spring Boot 1.5 自动配置体系1.1.24 开始逐步移除对 1.5.x 的适配不支持 JDK 11仅适配 JDK 7/8。2.0.x ~ 2.1.x1.1.18 ~ 1.2.61.1.16适配 Spring Boot 2.0 新的自动配置 API如DataSourceAutoConfiguration1.2.7 对 2.0.x 兼容下降偶发配置不生效。2.2.x ~ 2.3.x1.2.6 ~ 1.2.101.2.0全量兼容 Spring Boot 2.2 特性如多数据源配置 支持 JDK 8/11。2.4.x ~ 2.6.x1.2.10 ~ 1.2.181.2.8适配 Spring Boot 2.4 的配置绑定规则ConfigurationProperties优化修复 2.5.x 中监控面板 404 问题1.2.7 及以下偶发监控过滤器失效。2.7.xLTS 长期支持1.2.18 ~ 1.2.201.2.15官方重点适配版本修复大量 2.7.x 兼容问题支持 JDK 8/11/171.2.201.2.14 及以下存在 MBean 注册失败问题。3.0.x ~ 3.1.x最新1.2.20 ~ 1.2.251.2.19适配 Spring Boot 3.0 的 Jakarta EE 规范替代 Java EE1.2.18 及以下因依赖javax.servlet无法运行仅支持 JDK 17。