Alibaba Druid主要配置详解

 更新时间:2025年07月14日 09:59:23   作者:勤匠  
这篇文章主要介绍了Alibaba Druid主要配置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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),不中断请求,存在安全风险。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 散列表的原理与Java实现方法详解

    散列表的原理与Java实现方法详解

    这篇文章主要介绍了散列表的原理与Java实现方法,详细分析了散列表的原理,并结合实例形式分析了java实现散列表相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • 利用java模拟实现键盘鼠标操作(附源码)

    利用java模拟实现键盘鼠标操作(附源码)

    这篇文章主要为大家详细介绍了如何从零设计并实现一个功能完备的键盘鼠标模拟库,提供比原生 Robot 更友好的 API,更高的可定制性和可扩展性,感兴趣的小伙伴可以了解一下
    2025-05-05
  • Java垃圾回收机制算法详解

    Java垃圾回收机制算法详解

    这篇文章主要介绍了Java垃圾回收机制算法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Resty极简restful框架快速接入Spring

    Resty极简restful框架快速接入Spring

    这篇文章主要为大家介绍了Resty极简的restful框架快速接入Spring详细说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Spring Boot 事务详解(事务传播行为、事务属性)

    Spring Boot 事务详解(事务传播行为、事务属性)

    Spring Boot 提供了强大的事务管理功能,通过 @Transactional 注解可以方便地配置事务的传播行为和属性,本文将详细介绍 Spring Boot 中的事务管理,包括事务传播行为、事务属性以及声明式和编程式事务管理,感兴趣的朋友一起看看吧
    2025-05-05
  • JDK15正式发布(新增功能预览)

    JDK15正式发布(新增功能预览)

    这篇文章主要介绍了JDK15正式发布,新增功能预览,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-09-09
  • Struts2学习笔记(3)-DMI动态调用方式

    Struts2学习笔记(3)-DMI动态调用方式

    本文主要介绍Struts2的DMI动态调用的两种方式,简单实用,希望能给大家做一个参考。
    2016-06-06
  • JVM 中的 returnAddress过程详解

    JVM 中的 returnAddress过程详解

    JVM的毕竟是个虚拟机,是一种规范,虽说符合冯诺依曼的计算机设计理念,但是他并不是实体计算机,所以他的组成也不是什么存储器,控制器,运算 器,输入输出设备,本文给大家介绍JVM 中的 returnAddress,感兴趣的朋友一起看看吧
    2022-04-04
  • 使用logback实现按自己的需求打印日志到自定义的文件里

    使用logback实现按自己的需求打印日志到自定义的文件里

    这篇文章主要介绍了使用logback实现按自己的需求打印日志到自定义的文件里,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java实现简单的模板渲染

    Java实现简单的模板渲染

    这篇文章主要为大家详细介绍了Java实现简单的模板渲染的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论