Spring Boot 整合 Druid 实战:接入步骤、核心参数清单与避坑说明

向北走
向北走
发布时间:2026-08-23 | 127人浏览过
原创

前言

在 Spring Boot 项目中接入 Druid,本身并不复杂,难点往往在于参数多、配置层级容易写混,真正上线后又会遇到连接有效性、监控入口和性能取舍这些细节问题。本文按接入步骤往下拆,并把常用参数、监控台配置和典型避坑点放在同一条阅读路径里,方便你一边照着配,一边判断哪些设置是必须项、哪些适合按业务再调。

在 Spring Boot 项目里接入 Druid,真正麻烦的通常不是把依赖加进去,而是弄清楚哪些参数必须配、哪些参数会影响性能、哪些配置放错位置会直接引发冲突。下面按“接入步骤、参数理解、监控入口、常见避坑”四部分整理,方便你在照着配置时同时判断每一项设置值是否合理。

用 Spring Boot 官方 Starter 接入 Druid

在 Spring Boot 中整合 Druid,比较直接的做法是使用官方提供的 Starter。这样可以减少手动装配数据源的工作,把重点放在连接池参数和监控配置上。

先添加 Maven 依赖

在项目的 pom.xml 中加入 Druid Starter。文中给出的版本示例是 1.2.20:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.20</version> <!-- 建议使用最新稳定版 -->
</dependency>

在 application.yml 中同时配置数据源与连接池参数

只引入依赖还不够,配置文件里既要写基础数据库连接信息,也要明确指定使用 Druid 数据源,并补齐常用连接池参数。下面这份配置可以直接作为参考模板:

spring:
  datasource:
    # 基本连接信息(必须)
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 指定使用 Druid 数据源(必须)
    type: com.alibaba.druid.pool.DruidDataSource
    # Druid 连接池专属参数(核心清单见下文)
    druid:
      # 初始连接数
      initial-size: 5
      # 最小空闲连接数
      min-idle: 5
      # 最大活跃连接数
      max-active: 20
      # 获取连接超时时间(毫秒)
      max-wait: 60000
      # 连接保持空闲而不被回收的最小时间(毫秒)
      time-between-eviction-runs-millis: 60000
      # 连接在池中最小生存时间(毫秒)
      min-evictable-idle-time-millis: 300000
      # 验证连接是否有效的 SQL(MySQL 使用)
      validation-query: SELECT 1 FROM DUAL
      # 验证超时时间(秒)
      validation-query-timeout: 3
      # 申请连接时执行 validation-query 检测
      test-on-borrow: false
      # 归还连接时执行 validation-query 检测
      test-on-return: false
      # 空闲时检测连接有效性(建议开启)
      test-while-idle: true
      # 监控统计 + 日志 + 防御 SQL 注入(配置三个插件)
      filters: stat,log4j2,wall
      # StatFilter 监控配置
      stat:
        log-slow-sql: true
        slow-sql-millis: 2000
        merge-sql: true
      # WallFilter(SQL 防火墙)配置
      wall:
        config:
          delete-where-none-check: true
      # 监控页面(Druid Console)访问配置
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin123
        reset-enable: false
      # Web 应用监控(URI 统计)
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

这里有两个容易忽略的点:

  • type: com.alibaba.druid.pool.DruidDataSource 用来明确指定当前数据源实现。
  • spring.datasource.druid 下的配置才是 Druid 专属参数入口,像连接数、校验、监控和过滤器都应放在这里。

Druid 核心参数怎么理解

参数很多,但实际可以按几个维度来理解:连接数量、等待与回收、连接有效性校验、扩展能力。只要这几组思路理顺,后续调优会容易很多。

展示 Druid 核心参数按连接数、回收校验、性能与扩展能力分组后的关系信息图
Druid 参数分组与调优重点参数很多,但调优时更适合按职责分组理解,这张图帮助读者先建立参数分类,再回头看表格。

连接数量与并发上限

这组参数决定连接池启动后会预热多少连接、空闲时保留多少连接,以及高峰期最多允许多少并发连接:

参数名说明默认值推荐值(示例)
initial-size初始化时创建的连接数05~10
min-idle最小空闲连接数05~10
max-active最大活跃连接数(最大并发数)820~100(视业务)
max-wait获取连接最大等待时间(毫秒),超时抛异常-1(无限)60000

如果项目访问量不大,initial-size、min-idle 先从 5 起步通常够用;而 max-active 需要结合接口并发、数据库承载能力和 SQL 执行时长一起看,不能只按连接池本身估算。

空闲回收与连接有效性校验

这部分参数主要用来避免“池里看起来有连接,拿出来却已失效”的情况,也是线上稳定性最相关的一组配置:

参数名说明默认值推荐值(示例)
time-between-eviction-runs-millis空闲连接检查/回收的间隔(毫秒)60000(1分钟)60000
min-evictable-idle-time-millis连接最小空闲时间,超过则被回收(毫秒)1800000(30分钟)300000(5分钟)
max-evictable-idle-time-millis连接最大空闲时间,强制回收(毫秒)25200000(7小时)-
validation-query验证连接有效性的 SQL(必须支持快速执行)nullMySQL: SELECT 1 / Oracle: SELECT 1 FROM DUAL
validation-query-timeout验证 SQL 执行超时时间(秒)-13
test-on-borrow获取连接时立即执行验证(影响性能)falsefalse
test-on-return归还连接时执行验证(影响性能)falsefalse
test-while-idle空闲时检测连接有效性(强烈建议开启)falsetrue

实际使用时,比较常见的组合是:

  • 开启 test-while-idle: true;
  • 配置可快速执行的 validation-query;
  • 把 test-on-borrow 和 test-on-return 保持为 false,减少每次借还连接的额外开销。

监控、日志与 SQL 防火墙参数

Druid 的一个优势是扩展能力比较完整,常见的是通过 filters 启用监控、日志和 SQL 防火墙:

参数名说明默认值推荐值(示例)
pool-prepared-statements是否缓存 PreparedStatement(PSCache)falsetrue(开启可提升性能)
max-pool-prepared-statement-per-connection-size每个连接缓存的 PreparedStatement 上限-120
filters扩展插件(用逗号分隔):stat(监控), wall(防火墙), log4j2(日志)-stat,wall,log4j2
connection-properties自定义连接属性,如 config.decrypt=true(密码解密)--
use-global-data-source-stat是否开启全局数据源统计false-

其中,示例配置里的 stat、log4j2、wall 分别对应 SQL 监控统计、日志输出和 SQL 防火墙。像慢 SQL 记录和 SQL 合并统计,也是在 stat 相关配置里完成的:

stat:
  log-slow-sql: true
  slow-sql-millis: 2000
  merge-sql: true

如何访问 Druid 监控页面

项目启动后,可以直接通过下面的地址进入 Druid Console 登录页:

http://localhost:你的端口/druid/login.html

登录用户名和密码使用配置文件中设置的 login-username 与 login-password。进入控制台后,通常可以查看到 SQL 执行情况、连接池状态和 URI 监控数据。

如果你已经开启了下面这组配置,对应的监控入口就是生效的:

stat-view-servlet:
  enabled: true
  url-pattern: /druid/*
  login-username: admin
  login-password: admin123
  reset-enable: false

web-stat-filter:
  enabled: true
  url-pattern: /*
  exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

reset-enable: false 的作用也比较直接:关闭控制台中的重置能力,避免误操作清空统计信息。

这些配置最容易踩坑

实际项目里,Druid 能不能稳定跑起来,往往取决于下面几个细节是否处理正确。

展示 Druid 监控台访问入口、登录信息来源与三类常见踩坑点的对照信息图
监控入口与避坑检查表把监控入口和常见错误放在一张图里,便于读者上线前做自查。

1. filters 中声明的插件必须存在于类路径

如果配置了 filters: stat,log4j2,wall,那对应插件必须能在项目依赖里找到。比如启用了 log4j2,项目中就需要引入 spring-boot-starter-log4j2,否则应用启动时就可能直接报错。

2. 不要把 Druid 参数和 Hikari 参数混用

如果已经使用 spring.datasource.druid 前缀配置 Druid,就不要再同时塞入 spring.datasource 下的 Hikari 参数。两套连接池参数混在一起时,很容易出现行为异常,排查起来也比较耗时。

3. 生产环境里优先保证连接有效性,但要避免过度校验

线上配置通常建议开启 test-while-idle 并设置 validation-query,这样可以在空闲检查阶段提前发现失效连接。相对地,不建议把 test-on-borrow 设为 true,因为每次获取连接都做一次校验,会直接增加请求响应时间。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表