源本科技 | 码上会

配置 Druid 数据源

2026/04/10
1
0

引言

Druid 是阿里巴巴开源的数据库连接池,兼具连接池管理、SQL 监控、SQL 防火墙、Web 监控等核心功能,是 Java 生态中主流的高性能数据源。相比 Spring Boot 默认的 HikariCP,Druid 更适合需要可视化监控、安全防护的生产环境。

引入依赖

pom.xml 文件中添加 Druid 官方适配 Spring Boot 的 Starter 依赖,该依赖自动整合了连接池、监控、配置绑定等功能:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.28</version>
</dependency>

补充说明

  1. 无需手动排除默认数据源 HikariCP,starter 会自动适配替换;

  2. 版本可根据 Spring Boot 版本选择兼容版,1.2.28 为稳定通用版本。

基础配置

application.yml 中配置数据库核心连接信息,替换原有默认数据源配置,适配 MySQL 8.0 + 版本:

spring:
  datasource:
    druid:
      # 数据库连接地址,追加时区、SSL 等必要参数
      url: jdbc:mysql://localhost: 3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
      # 数据库用户名
      username: root
      # 数据库密码
      password: 123456
      # MySQL 8.0 + 驱动类,低版本可使用 com.mysql.jdbc.Driver
      driver-class-name: com.mysql.cj.jdbc.Driver

连接池参数

优化连接池性能参数,控制连接数量、空闲时间、校验规则,避免连接泄漏、连接耗尽等问题,所有参数均为生产环境推荐配置

spring:
  datasource:
    druid:
      # 初始化连接数
      initial-size: 10
      # 最大活跃连接数
      max-active: 20
      # 最小空闲连接数
      min-idle: 1
      # 获取连接的最大等待时间,单位:毫秒
      max-wait: 60000
      # 空闲连接校验的时间间隔,单位:毫秒
      time-between-eviction-runs-millis: 60000
      # 连接最小空闲时间,单位:毫秒
      min-evictable-idle-time-millis: 300000
      # 空闲时是否校验连接有效性
      test-while-idle: true
      # 获取连接时是否校验有效性
      test-on-borrow: true
      # 归还连接时是否校验有效性
      test-on-return: false
      # 开启预处理语句池
      pool-prepared-statements: true
      # 预处理语句最大缓存数
      max-open-prepared-statements: 20
      # 连接有效性校验 SQL
      validation-query: SELECT 1
      # 校验超时时间,单位:秒
      validation-query-timeout: 500
      # 过滤器配置:stat=监控统计,wall=SQL 防火墙
      filters: stat,wall

核心参数

参数

作用

initial-size

项目启动时,自动创建的数据库连接数量

max-active

连接池允许的最大并发连接数,超过则排队等待

max-wait

获取连接超时时间,超时直接抛出异常,避免线程阻塞

filters

功能过滤器,stat 开启监控,wall 开启 SQL 注入防护

监控配置

Druid 提供可视化 Web 监控页面,无需额外监控组件,通过配置即可开启,无需强制依赖 Actuator(Actuator 为 Spring Boot 应用监控,与 Druid 监控独立)。

开启监控面板

application.yml 中添加监控核心配置,设置登录账号、访问路径:

spring:
  datasource:
    druid:
      stat-view-servlet:
        # 开启 Druid 监控面板
        enabled: true
        # 监控面板访问路径
        url-pattern: /druid/*
        # 允许重置监控数据
        reset-enable: true
        # 监控面板登录用户名
        login-username: admin
        # 监控面板登录密码
        login-password: admin
        # 允许访问的 IP,默认所有 IP 可访问
        allow: 127.0.0.1

扩展监控配置(推荐)

补充 Web 请求监控、Spring 组件监控,完善监控维度:

spring:
  datasource:
    druid:
      # Web 监控过滤器
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.css,/druid/*"
      # Spring 监控
      aop-patterns: com.lusifer.boot.service.*,com.lusifer.boot.mapper.*

测试接口编写

创建 RESTful 接口控制器,用于触发数据库操作,生成监控数据:

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    public int createUser(@RequestBody User user) {
        return userService.create(user.getName(), user.getAge());
    }

    @GetMapping("/{name}")
    public List<User> getByName(@PathVariable String name) {
        return userService.getByName(name);
    }

    @DeleteMapping("/{name}")
    public int deleteByName(@PathVariable String name) {
        return userService.deleteByName(name);
    }

    @GetMapping("/count")
    public int getAllUsersCount() {
        return userService.getAllUsers();
    }

    @DeleteMapping("/all")
    public int deleteAllUsers() {
        return userService.deleteAllUsers();
    }
}

查看 Druid 监控

启动 Spring Boot 应用,访问 Druid 监控面板地址:http://localhost: 8080/druid/

输入配置的登录账号 admin 和密码 admin,即可进入监控首页:

监控面板

数据源

实时展示连接池配置、连接使用状态、活跃连接数、空闲连接数等核心指标,用于排查连接池瓶颈:

SQL 监控

展示应用执行的所有 SQL 语句,包含执行次数、执行耗时、读取行数、更新行数等关键数据,是性能优化的核心依据。

监控面板将 SQL 执行时间分为 8 个区间统计,直观反映 SQL 性能分布:

  • 0 - 1 毫秒:极速执行

  • 1 - 10 毫秒:快速执行

  • 10 - 100 毫秒:普通执行

  • 100 - 1000 毫秒:慢查询

  • 1000 - 10000 毫秒:严重慢查询

  • 10000 - 100000 毫秒:异常耗时

  • 100000 - 1000000 毫秒:极端耗时

  • 1000000 毫秒以上:执行超时

同时支持 执行 + RS 时分布 统计,合并 SQL 执行时间与结果集处理时间,精准定位大数据量返回导致的性能问题。

SQL 防火墙

用于 SQL 安全防护,统计表访问频率、拦截非法 SQL、防御 SQL 注入攻击:

开启防火墙统计

需在 filters 中添加 wall 参数(已在连接池配置中完成):

spring:
  datasource:
    druid:
      filters: stat,wall

扩展知识

  1. 过滤器说明

    • stat:开启 SQL 监控统计,必选;

    • wall:开启 SQL 防火墙,防御注入攻击,生产环境必开;

    • log4j2:输出 Druid 日志,按需开启。

  2. 监控权限控制 生产环境必须配置 allow 限制访问 IP,禁止公网访问监控面板。

  3. 慢查询监控 可配置慢查询阈值,自动记录执行超时的 SQL:

    spring:
      datasource:
        druid:
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

注意事项

  1. 监控面板账号密码使用强密码,限制内网访问;

  2. max-active 根据业务并发量调整,避免过大导致数据库压力过高;

  3. 必须开启 wall 过滤器,防范 SQL 注入风险;

  4. 定期清理监控数据,避免内存占用过高。


总结

  1. Druid Starter 可一键替换默认数据源,自动整合连接池与监控功能;

  2. 核心配置分为基础连接、连接池参数、监控面板三部分,参数需贴合业务场景调整;

  3. 可视化监控支持 SQL 性能分析、连接池管理、SQL 安全防护,是生产环境必备能力;

  4. 生产环境需做好权限控制、慢查询监控、防火墙开启,保障数据源安全稳定。