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