欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

Alibaba Druid主要配置详解

2025年07月14日 C/C++
alibaba druid主要配置连接配置spring.datasource.druid.initial-size 初始连接数描述:初始连接数,初始连接数并非在应用启动后立即创建,而是首次执行sql操

alibaba druid主要配置

连接配置

spring.datasource.druid.initial-size 初始连接数

描述:

  • 初始连接数,初始连接数并非在应用启动后立即创建,而是首次执行sql操作时才会初始化指定数量的物理连接;
  • 建议与min-idle一致。
  • 示例initial-size=5,应用启动后无数据库操作时连接数为0;首次执行select时才会创建5个连接放入池中。

spring.datasource.druid.min-idle 最小连接数

描述:

  • 最小空闲连接,连接池在任何时刻都会保持设定的空闲连接数量,即使长时间无请求也不会销毁这些连接,避免频繁创建/销毁。

spring.datasource.druid.max-active 最大活动连接数

描述:

  • 指定连接池中允许同时存在的最大活动连接数(包括正在被使用的连接和空闲连接)。
  • 当活跃连接数达到阈值时:新请求会进入等待队列(若配置了max-wait超时时间)。
  • 若等待超时或无可用连接,抛出 sqlexception(如connection is not available)

spring.datasource.druid.max-wait 获取连接最大等待时间

描述:

  • 控制服务获取数据库连接最大等待时间参数,单位为毫秒(ms);
  • 当连接池中无可用连接时,新请求等待获取连接的最长时间:若在等待期间有连接释放,则请求成功获取连接。
  • 若超时仍无可用连接,抛出 sqlexception(如 connection is not available)

spring.datasource.druid.test-while-idle 空闲连接有效性检测

描述:

  • 当设置为true时,druid会在连接空闲时间超过time-between-eviction-runs-millis指定的间后,通过执行validation-query(如select 1)检测连接是否有效。
  • 若检测失败,连接会被标记为无效并关闭,同时连接池自动创建新连接补充至min-idle数量。

spring.datasource.druid.time-between-eviction-runs-millis 清理无效连接的检测间隔时间

描述:

  • 定义连接池后台线程(destroytask)扫描并清理无效连接的间隔时间;
  • 定期清理闲置连接,避免连接因超时失效后仍被使用,单位为毫秒(ms),默认值:60000(1分钟)。

spring.datasource.druid.min-evictable-idle-time-millis 空闲连接最小存活时间

描述:

  • 控制空闲连接最小存活时间(单位:毫秒);
  • 当连接的空闲时间超过此值时,可能被回收线程(destroytask)关闭。
  • 默认值:180000(30分钟)。
  • 需配合time-between-eviction-runs-millis(检测间隔)生效,由后台线程周期性扫描空闲连接。

spring.datasource.druid.validation-query 检测数据库连接有效性sql

  • 描述:指定一个轻量级sql查询语句(如 select 1),用于以下场景:
  • 连接有效性检测:当启用test-while-idle或test-on-borrow时,通过执行该sql验证连接是否有效。
  • 空闲连接回收:后台线程定期扫描空闲连接,对空闲时间超阈值的连接执行该语句,失败则关闭无效连接

spring.datasource.druid.test-on-borrow 控制连接借出时有效性验证

描述:

  • 当test-on-borrow=true时,应用每次从连接池申请连接时,会同步执行validation-query(如 select 1)验证连接是否有效。
  • 若验证失败,则丢弃该连接并重新申请一个新连接。(生产环境配置建议禁用)

spring.datasource.druid.test-on-return 归还连接时有效性验证

描述:

  • 当 test-on-return=true 时,应用将连接归还到连接池前,会同步执行validation-query(如 select 1)验证连接是否有效。
  • 若验证失败,连接会被直接丢弃而非放回池中。(生产环境配置建议禁用)

spring.datasource.druid.pool-prepared-statements​预编译语句缓存

描述:

  • 当为true时,druid会为每个数据库连接缓存预编译的sql语句(preparedstatement),避免重复编译相同 sql,提升执行效率。
  • 默认值false

spring.datasource.druid.max-pool-prepared-statement-per-connection-size单个连接预编译语句缓存数量上限

描述:

  • 指定每个物理连接可缓存的 preparedstatement 对象数量上限(默认值 20)。
  • 需配合pool-prepared-statements=true生效:当此值>0时,自动启用 preparedstatement 缓存。
  • 避免相同sql重复编译,提升高频重复查询性能(如批量操作),实测可降低 20%~30%的sql执行时间。

spring.datasource.druid.filters 过滤器链​​

描述:

  • 指定启用的过滤器链。
  • 这些过滤器在sql执行前后拦截操作,提供监控、安全、日志等扩展功能。
  • 如:filters: stat,wall,slf4j # 启用监控、防火墙、日志过滤器。
  • 若需使用druid内置的sql监控页面(如 localhost:8080/druid/sql.html),必须启用 stat 过滤器,否则无法采集sql执行数据

spring.datasource.druid.connection-properties键值对形式传递自定义参数

描述:

  • 通过分号“;”分隔的键值对(如 key1=value1;key2=value2),向druid内部组件传递配置参数,影响连接池行为或扩展功能

spring.datasource.druid.use-global-data-source-stat合并多个数据源监控统计

描述:

  • 用于合并多个数据源监控统计的关键配置项,主要作用是将应用中多个 druiddatasource 实例的监控数据聚合为全局视图,便于统一分析,当应用中存在多个数据源(如主从库、多租户库)时,启用 use-global-data-source-stat: true 会将所有druiddatasource 的统计信息(如 sql 执行次数、耗时、连接数等)合并展示在 druid 监控页面的“数据源”标签页下。
  • 未启用时:每个数据源独立统计,监控页面需切换不同数据源查看数据。启用后:监控页直接展示所有数据源的汇总数据,降低分析复杂度。
  • 每个 druiddatasource 默认会创建独立的 jdbcdatasourcestat 对象收集统计信息。
  • 启用全局统计后,多个数据源共享同一个统计对象,减少内存占用和计算开销。

监控页面配置

spring.datasource.druid.stat-view-servlet.enabled 控制监控页面是否启用

描述:

  • 当设置为 true 时,druid 会注册一个statviewservlet,提供内置的web监控页面(访问路径默认为 /druid/*),用于可视化查看数据库连接池状态、sql执行统计、慢查询日志等关键信息。
  • 默认值false(禁用)。

spring.datasource.druid.stat-view-servlet.url-pattern监控页面访问路径配置

描述:

  • 该配置项指定了 druid 监控页面的 url 路径模式。
  • 默认值为 /druid/*,表示监控页面的根路径为 http://<服务器地址>:<端口>/druid/。
  • 例如:登录页http://localhost:8080/druid/login.html;监控页:http://localhost:8080/druid/sql.html

spring.datasource.druid.stat-view-servlet.login-username监控页面登录用户名

描述:

  • 配置监控页面登录用户名;
  • 与login-password配合使用,为监控页面(如 http://localhost:8080/druid/login.html)提供基础安全防护,防止未授权用户访问敏感数据库监控数据;
  • 未配置时默认无认证(生产环境禁用此状态),访问监控页无需登录。

spring.datasource.druid.stat-view-servlet.login-password监控页面登录密码

描述:

  • 配置监控页面登录密码,与login-username配合使用,为监控页面(如 http://localhost:8080/druid/login.html)提供基础安全防护,防止未授权用户访问敏感数据库监控数据;
  • 未配置时默认无认证(生产环境禁用此状态),访问监控页无需登录。

spring.datasource.druid.stat-view-servlet.reset-enable监控页面的重置功能开关

描述:

  • true(默认值):启用/禁用重置功能;监控页面显示“reset all”按钮,点击后可清空所有统计信息(如sql执行次数、慢sql记录、请求耗时等),数据从零开始重新计数。
  • false:隐藏重置按钮,防止误操作导致监控数据丢失。生产环境强烈建议关闭。

web请求统计

spring.datasource.druid.web-stat-filter.enabled启用web请求关联sql统计

描述:当设置为 true 时,druid 的 webstatfilter 会拦截所有 web 请求,自动采集以下数据:

  • sql 执行详情:包括 sql 语句、执行次数、耗时、慢sql记录。
  • 请求关联数据:url 访问路径、请求次数、session活跃度、数据库表访问频率等。
  • 资源过滤:通过exclusions配置排除静态资源(如js、css、图片),避免无效统计

监控页面数据支撑:启用后,druid监控页面的“uri监控”和“session监控”标签页会显示实时数据。若未启用,这些页面将无数据。

注意!

  • 启用监控页面:需同时设置 stat-view-servlet.enabled=true,否则无法查看统计结果。
  • 启用sql监控:需配置 filters: stat,否则sql执行详情无法采集

spring.datasource.druid.web-stat-filter.url-pattern过滤器的拦截路径配置

描述:

  • 该配置指定了 druid 的 webstatfilter 需要拦截哪些 url 路径的请求,以采集与数据库操作相关的统计信息(如 sql 执行详情、请求耗时、session 活跃度等)。
  • 默认值:/(拦截所有请求)。
  • 典型场景:需监控所有业务接口的数据库访问行为时,保持默认值即可;若需缩小范围,可调整为 /api/ 等特定路径。

关联数据采集,仅被拦截的请求才会生成以下监控数据:

  • sql监控页:sql 执行次数、慢 sql 记录。
  • uri监控页:每个接口的请求次数、平均耗时、数据库表访问频率。
  • session 监控页:用户会话的活跃时长、请求次数等(需额外启用 session-stat-enable=true)

spring.datasource.druid.web-stat-filter.exclusions静态资源排除配置

描述:

指定哪些url路径不参与数据库监控统计,例如:

  • 静态资源:*.js、*.css、*.jpg、*.ico 等。
  • 内置监控页面:/druid/*(避免监控自身请求)。
  • 健康检查接口:如 spring boot actuator 的 /actuator/health

sql性能监控

spring.datasource.druid.filter.stat.log-slow-sql启用慢 sql记录功能

描述:

  • 当设置为 true 时,druid会捕获执行时间超过阈值(由slow-sql-millis定义)的sql语句,并将其输出到日志文件中。
  • 默认值:false(未启用),需手动开启。
  • 若启用log-slow-sql: true,慢sql会输出到日志文件。

spring.datasource.druid.filter.stat.slow-sql-millis定义慢 sql判定阈值

描述:

  • 定义慢sql标准;当sql执行时间超过设定阈值时,druid会将其标记为慢sql。默认值3000(3秒)

spring.datasource.druid.filter.stat.db-type数据库类型

描述:

druid的statfilter需根据数据库类型(如 mysql、oracle)解析sql语法,以正确统计以下信息:

  • sql执行详情:执行次数、耗时、慢sql识别。
  • 执行计划分析:识别 sql 结构(如 select/update)并关联性能数据。
  • 若未配置 db-type,可能因语法差异导致统计错误(如 oracle 分页语句解析失败)

spring.datasource.druid.filter.stat.merge-sql是否合并统计结构相同但格式不同的sql语句

描述:

  • 当merge-sql=true时,druid会将语义相同但格式不同的sql(如空格、换行符差异)合并为同一条统计记录;
  • 合并后显著降低内存占用和统计信息数量,提升监控效率,尤其在高并发场景下。

sql防火墙

spring.datasource.druid.wall.enabled启用sql防火墙开关

描述:

  • 当设置为true时,druid会激活内置的wallfilter,对所有执行的 sql 进行安全审计,拦截危险操作(如 sql 注入、无 where 的 delete/update、drop table 等);
  • 默认值:false。

spring.datasource.druid.wall.config.drop-table-allow 禁止删除表开关

描述:

  • 当设置为false(默认值)时:禁止执行drop table、drop view 等删表操作,防止误删或恶意删除数据库表结构。
  • 当设置为true 时:允许执行删表操作(生产环境强烈不推荐)。

spring.datasource.druid.wall.config.truncate-allow禁止清空表开关

描述:

  • 当设置为false(默认值)时禁止执行truncate table操作,防止误删或恶意清空整张表的数据(该操作不可回滚,且不触发触发器)。
  • 设置为true时允许执行truncate操作(生产环境强烈不推荐)

spring.datasource.druid.wall.config.delete-allow禁止无where条件的delete操作开关

描述:

  • 当设置为false时,druid会拦截所有 delete 语句,防止误删或恶意删除数据。
  • 默认值true(允许执 delete语句)

spring.datasource.druid.wall.config.select-all-column-allow禁止select *开关

  • 描述:当设置为false时,druid会拦截所有 select * from table 这类查询语句。
  • 默认值true(允许执行 select * 查询)

spring.datasource.druid.wall.config.condition-and-always-true-allow拦截永真条件开关

描述:

  • 若设置为true,允许sql中出现 where 1=1 这类条件,攻击者可能利用此特性绕过身份验证或批量窃取数据,默认值false

spring.datasource.druid.wall.config.multi-statement-allow禁止多语句执行开关

描述:

  • 控制是否允许单次请求执行多条sql语句的安全配置项。
  • 默认值false(禁止执行多条sql)。
  • 开启后允许通过分号;分隔执行多条sql(如 update table1 set …; update table2 set …)。

spring.datasource.druid.wall.config.function-allow控制是否允许sql语句调用数据库函数

描述:

默认值false(禁止调用数据库函数);若设为 true,允许执行如sleep()、load_file()、exec() 等敏感函数,导致以下攻击:

  • 时间盲注攻击:利用 sleep(5) 探测数据库结构。
  • 文件读取/写入:通过 load_file(‘/etc/passwd’) 窃取系统文件。
  • 命令执行:调用 exec(‘rm -rf /’) 破坏系统(部分数据库支持)

spring.datasource.druid.wall.config.read-only-tables配置只读表

描述:

  • 通过配置表名(支持正则表达式),禁止对这些表执行 insert/update/delete 等写操作;
  • 如:read-only-tables: user, config_.* #禁止修改user表和config_前缀的表

spring.datasource.druid.wall.config.log-violation控制是否记录被拦截sql语句

描述:

  • 默认值false(不记录拦截的 sql)。
  • 若设置为true,当sql语句触发防火墙规则(如执行select *、永真条件 where 1=1或高危操作)时,druid会通过 log.error 输出详细的拦截日志。
  • 日志内容包含违规sql、拦截原因、执行时间等信息,便于安全审计。

spring.datasource.druid.wall.config.throw-exception是否对违规sql抛出异常

描述:

  • 默认值:true(检测到高危sql时抛出 sqlexception 阻断执行),若设置为false仅记录拦截日志(需配合 log-violation=true),不中断请求,存在安全风险。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。