druid Documentation

阿里云计算平台DataWorks( 团队出品,为监控而生的数据库连接池

28,176 stars Java Java 1 file · ~33,722 tokens
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy druid on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name druid -p 3306:3306 --restart always mysql:5.7
Configured Services & Ports
⚙️ mysql
image: mysql:5.7
🔌 Ports: 3306:3306
⚙️ postgres
image: postgres:14.1
🔌 Ports: 5432:5432
docker-compose.yml
yaml (docker-compose.yml)
version: "2.2"

services:
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_USER=petclinic
      - MYSQL_PASSWORD=petclinic
      - MYSQL_DATABASE=petclinic
    volumes:
      - "./conf.d:/etc/mysql/conf.d:ro"
  postgres:
    image: postgres:14.1
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=petclinic
      - POSTGRES_USER=petclinic
      - POSTGRES_DB=petclinic

File: README.md

Alibaba Druid






English | 中文


Druid 是阿里巴巴开源的高性能数据库连接池和 SQL 解析器。它将 JDBC 连接池、SQL 解析分析、安全防护和监控统计深度整合为一体,是 Java 生态中功能最全面的数据库中间件之一。

核心特性

功能领域 说明
JDBC 连接池 高性能、可监控的连接池实现 DruidDataSource,支持物理连接预热、PSCache、KeepAlive 等高级特性
SQL 解析器 支持 30 种 SQL 方言的完整解析器,生成 AST 抽象语法树,支持 SQL 格式化、改写和分析
SQL 防火墙 基于 AST 的 WallFilter SQL 安全防护,可拦截 SQL 注入、危险操作等
监控统计 内置 StatFilter 实时采集 SQL 执行统计、连接池状态,提供 Web 监控页面
Filter 扩展 可插拔的 Filter-Chain 架构,支持日志、加密、统计等扩展
Spring Boot 集成 提供 Spring Boot 2.x / 3.x / 4.x Starter,开箱即用
高可用 HighAvailableDataSource 支持多数据源负载均衡、健康检查和故障切换

快速开始

Maven 依赖

xml
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.24</version>
</dependency>

Spring Boot 项目(推荐)

根据 Spring Boot 版本选择对应 Starter:

Spring Boot 版本 Starter
2.x druid-spring-boot-starter
3.x druid-spring-boot-3-starter
4.x druid-spring-boot-4-starter
xml
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.24</version>
</dependency>
yaml
# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    druid:
      initial-size: 5
      max-active: 20
      min-idle: 5
      max-wait: 60000
      # 启用 Filter
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 2000
        wall:
          enabled: true

直接使用 DruidDataSource

java
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setInitialSize(5);
dataSource.setMaxActive(20);
dataSource.setMinIdle(5);
dataSource.init();

// 使用连接
try (Connection conn = dataSource.getConnection()) {
    // 执行 SQL
}

SQL 解析器

java
// 解析 SQL
String sql = "SELECT id, name FROM users WHERE age > 18 ORDER BY name";
List<SQLStatement> stmts = SQLUtils.parseStatements(sql, DbType.mysql);

// 格式化 SQL
String formatted = SQLUtils.format(sql, DbType.mysql);

// 获取表信息
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(DbType.mysql);
stmts.get(0).accept(visitor);
System.out.println("Tables: " + visitor.getTables());
System.out.println("Columns: " + visitor.getColumns());

项目模块

text
druid/
├── core/                           # 核心库(连接池、SQL 解析、安全、监控)
├── druid-spring-boot-starter/      # Spring Boot 2.x 自动配置
├── druid-spring-boot-3-starter/    # Spring Boot 3.x 自动配置
├── druid-spring-boot-4-starter/    # Spring Boot 4.x 自动配置
├── druid-wrapper/                  # 包装工具
├── druid-admin/                    # 集群监控管理端
└── doc/                            # 文档

SQL 方言支持

Druid SQL 解析器支持 30 种数据库方言,每种方言都提供完整的 Lexer、Parser、AST 和 Visitor 实现:

分类 支持的数据库
主流关系型 MySQL, PostgreSQL, Oracle, SQL Server, DB2, H2, Informix
国产数据库 达梦 (DM), Oscar, GaussDB
分析型/MPP ClickHouse, Doris, StarRocks, Teradata, Redshift
云原生/数仓 BigQuery, Snowflake, Synapse, Hologres, ODPS (MaxCompute)
计算引擎 Hive, Spark, Presto, Impala, Athena, Blink, Databricks
其他 Phoenix, SuperSQL, Transact-SQL

文档

文档 说明
架构概览 整体架构设计与核心组件交互
连接池指南 DruidDataSource 配置、调优与最佳实践
SQL 解析器指南 SQL 解析、格式化、改写与方言扩展
SQL 方言支持 完整方言支持矩阵与各方言特性
Filter 机制 Filter-Chain 架构与自定义 Filter 开发
SQL 防火墙 WallFilter 配置与 SQL 安全防护
监控统计 StatFilter 与 Web 监控页面
高可用数据源 HighAvailableDataSource 配置与使用
Spring Boot 集成 Spring Boot Starter 配置指南
Wiki (中文) 常见问题与进阶文档
Wiki (English) FAQ and documentation

从源码构建

bash
git clone https://github.com/alibaba/druid.git
cd druid
mvn clean install

要求: Java 8+ JDK,Apache Maven 3.6+

贡献

欢迎参与 Druid 项目!请阅读 贡献指南 了解如何参与开发。

安全漏洞

请勿通过公开 Issue 报告安全漏洞。详见 安全策略。

相关阿里云产品

License

Druid 基于 Apache License 2.0 开源。


File: doc/ha-datasource.md

High Available DataSource 说明

1. High Available DataSource 介绍

High Available DataSource(下文简称HA DataSource)即高可用数据源,基于Druid数据源之上进行了二次封装,在无需LVS或HA Proxy的前提下,实现了数据源层面的负载均衡。

例如,如下场景中均可通过HA DataSource配置数据源的连接:

  1. 读写分离场景中,有多个数据库的从库提供读服务;
  2. 使用了分库分表中间件(例如MyCat)进行分库分表,部署了多台中间件服务;

HA DataSource提供了如下特性:

  1. 节点路由 - 根据节点名称指定路由,随机路由,粘性随机路由
  2. 节点配置 - 纯手工配置节点,根据配置文件生成节点,根据ZooKeeper信息生成节点
  3. 节点健康检查 - 基于ValidConnectionChecker的节点检查机制,检查间隔时间可根据运行情况动态调整

2. 节点的配置与路由选择

2.1 根据名称路由节点

在Spring配置文件中加入如下DataSource配置:

xml
<map>
            <entry key="default" value-ref="fooDataSource" /> 
            <entry key="foo" value-ref="fooDataSource" />
            <entry key="bar" value-ref="barDataSource" />
        </map>

其中,fooDataSource和barDataSource分别是两个事先配置好的DataSource。

在没有手工进行选择前,默认会使用default,如要指定数据源,可使用如下方法:

java
((HighAvailableDataSource) dataSource).setTargetDataSource("bar");

注意:指定目标数据源的标志是保存在线程上下文中的,因此在使用完毕后,需要及时将targetDataSource设回default。

2.2 根据配置文件生成节点集合

假设有两台MySQL,将JDBC URL、用户名和密码按如下格式写入datasource.properties中:

properties
ha.db1.url=jdbc:mysql://192.168.0.10:3306/foo?useUnicode=true
ha.db1.username=foo
ha.db1.password=password

ha.db1.url=jdbc:mysql://192.168.0.11:3306/foo?useUnicode=true
ha.db1.username=foo
ha.db1.password=password

# 下面这个由于前缀不同,不会被ha前缀加载
hb.db1.url=jdbc:mysql://192.168.0.12:3306/bar?useUnicode=true
hb.db1.username=bar
hb.db1.password=password

此处的ha是用于过滤配置项的,在一个配置文件中如存在多个不同前缀,可以通过前缀进行区分。

在Spring配置文件中加入如下DataSource配置:

xml

stickyRandom,粘性随机选择,5秒内,同一个线程中多次通过HighAvailableDataSource获取连接时始终会返回同一个DataSource的连接。

每隔60秒,FileNodeListener会扫描一次配置文件,如果文件内容发生变化,则会动态调整节点。如果是删除节点,会将待删除节点先放入一个黑名单,待定PoolUpdater的60秒定时任务执行时一起清理。

配置后,可像使用普通DataSource那样来使用dataSource Bean。

2.3 根据ZooKeeper生成节点集合

HA DataSource默认基于文件创建随机节点列表,只需提供其他NodeListener的实现类,就可以监听不同的配置源,例如ZookeeperNodeListener就是基于ZooKeeper的。

在Spring配置文件中加入如下DataSource配置:

xml

假设ZooKeeper的/ha-druid-datasources目录下有NodeFoo和NodeBar两个节点,NodeFoo内容如下:

text
ha.host=192.168.0.10
ha.port=3306
ha.database=foo
ha.username=foo
ha.password=password

urlTemplate用于根据ZooKeeper数据创建JDBC URL,其中的占位符会替换为具体的值。

text
jdbc:mysql://192.168.0.10:3306/foo?useUnicode=true

可以手动在ZooKeeper上添加节点配置,也可以通过代码进行注册,假设对MyCAT服务端代码进行了调整,在服务启动后进行ZooKeeper注册,可以添加如下代码:

java
// 注册节点
ZookeeperNodeRegister register = new ZookeeperNodeRegister();
register.setZkConnectString("192.168.0.2:2181");
register.setPath("/ha-druid-datasources");
register.init();

List<ZookeeperNodeInfo> payload = new ArrayList<ZookeeperNodeInfo>();
ZookeeperNodeInfo node = new ZookeeperNodeInfo();
node.setPrefix("ha");
node.setHost("192.168.0.10");
node.setPort(3306);
node.setDatabase("foo");
node.setUsername("foo");
node.setPassword("password");
payload.add(node);
register.register("NodeFoo", payload);

// 此处创建的是临时节点,Java进程停止后该节点就会消失,以此实现节点发现和下线。
// 也可以通过register.destroy()从ZooKeeper上删除该节点。

ZookeeperNodeListener会监听ZooKeeper的节点内容变更,PoolUpdater每隔60秒会清理已下线节点。

3. 随机节点的健康检查

在使用随机节点选择(random)或粘性随机节点选择(stickyRandom)时,HA DataSource会去检查后端节点的健康状态。

3.1 检查策略

  • 根据 druid.ha.random.checkingIntervalSeconds 设定的间隔时间异步进行检测
  • 针对每个节点,使用数据源的配置信息新建后端节点的数据库连接,调用dataSource.validateConnection() 方法检查连接状态
  • 完成检查后关闭新建的连接
  • 某个节点连续druid.ha.random.blacklistThreshold次检查失败后,会被加入黑名单
  • 黑名单会有另外一个线程进行探活检查,每隔druid.ha.random.recoveryIntervalSeconds秒进行一次探活,如果探活成功,则会将其从黑名单中移除

3.2 策略优化

3.2.1 快速发现失败节点

为了快速发现有问题的节点,HA DataSource做了一系列的优化:

  • 节点正常时,druid.ha.random.checkingIntervalSeconds进行一次节点检查
  • 有节点出现异常后,间隔时间会快速缩短,在短时间内进行第二次检查

3.2.2 减少检查次数

为了保证节点出问题时能快速发现,势必需要频繁进行检查,这样就加重了后端数据库或中间件节点的负担。RandomDataSourceValidateThread中记录了每个节点的上次检查成功时间,可以将正常执行的SQL操作也视为检查的一部分,只要SQL正常执行,也算检查成功。

为此,HA DataSource提供了一个RandomDataSourceValidateFilter,在SQL执行成功后修改对应DataSource的上次检查成功时间。在为DruidDataSource配置filters时,只需简单增加一个haRandomValidator即可实现上述功能。

3.3 参数配置

关于健康检查,HA DataSource提供了4个参数可供配置:

配置项 默认值 说明
druid.ha.random.checkingIntervalSeconds 10秒 健康检查间隔时间
druid.ha.random.validationSleepSeconds 0秒 健康检查建立连接,等待多少秒后再进行连接校验
druid.ha.random.recoveryIntervalSeconds 120秒 黑名单中DataSource恢复检测的间隔时间
druid.ha.random.blacklistThreshold 3次 健康检查失败多少次后放入黑名单

这些参数配置在Druid的ConnectProperties中即可。


File: druid-admin/README.md

Druid Admin — 集群监控管理

English | 中文


中文

简介

Druid Admin 是 Druid 的集群监控管理组件。单机部署时可以使用 Druid 内置的 StatViewServlet 监控页面,但在集群环境下,各节点的监控数据分散在各自的内置页面中。Druid Admin 解决了这个问题,它从集群中各个应用节点采集 Druid 监控数据并进行汇总展示。

支持的注册中心

Druid Admin 通过注册中心发现集群中的应用节点,支持以下注册中心(同时只能启用一种):

注册中心 配置项
Nacos spring.cloud.nacos.discovery.enabled=true
Consul spring.cloud.consul.enabled=true
Eureka eureka.client.enabled=true

快速开始

1. 配置 application.yml

yaml
server:
  port: 19999

spring:
  application:
    name: druid-admin
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: localhost:8848

monitor:
  applications: app1,app2    # 需要监控的服务名(spring.application.name)
  login-username: admin       # 监控页面登录用户名
  login-password: your_password  # 监控页面登录密码

2. 启动访问

bash
mvn spring-boot:run -pl druid-admin

访问 http://localhost:19999/druid/sql.html 查看监控数据。

配置示例

Consul 注册中心

yaml
spring:
  cloud:
    consul:
      enabled: true
      host: localhost
      port: 8500
      discovery:
        enable: true
        hostname: ${spring.cloud.client.ip-address}
    nacos:
      discovery:
        enabled: false
eureka:
  client:
    enabled: false

Eureka 注册中心

yaml
eureka:
  instance:
    preferIpAddress: true
    ipAddress: localhost
    instance-id: ${eureka.instance.ipAddress}:${server.port}:${spring.application.name}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    enabled: true
spring:
  cloud:
    consul:
      enabled: false
    nacos:
      discovery:
        enabled: false

前提条件

被监控的应用需要:

  1. 启用 StatFilter(spring.datasource.druid.filter.stat.enabled=true)
  2. 启用 StatViewServlet(spring.datasource.druid.stat-view-servlet.enabled=true)
  3. 在同一注册中心中注册

English

Overview

Druid Admin is a cluster monitoring component for Druid. While single-node deployments can use the built-in StatViewServlet, cluster environments need centralized monitoring. Druid Admin discovers application nodes via service registries and aggregates their Druid monitoring data.

Supported Registries

Registry Config
Nacos spring.cloud.nacos.discovery.enabled=true
Consul spring.cloud.consul.enabled=true
Eureka eureka.client.enabled=true

Only one registry can be enabled at a time.

Quick Start

yaml
server:
  port: 19999
spring:
  application:
    name: druid-admin
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: localhost:8848
monitor:
  applications: app1,app2
  login-username: admin
  login-password: your_password

Access http://localhost:19999/druid/sql.html to view monitoring data.

Prerequisites

Monitored applications must:

  1. Enable StatFilter
  2. Enable StatViewServlet
  3. Register with the same service registry

File: druid-demo-petclinic/readme.md

Spring&Druid PetClinic Sample Application

Integrate Druid data sources via druid-spring-boot-starter to build Spring PetClinic Sample Application

About Spring PetClinic see: https://github.com/spring-projects/spring-petclinic

  1. Run druid-demo-petclinic/src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java

  2. The demo PetClinic system: http://127.0.0.1:8080

  3. The Druid stat system: http://127.0.0.1:8080/druid/index.html

  4. Try to modify the druid configuration: druid-demo-petclinic/src/main/resources/application.properties


File: druid-spring-boot-starter/README.md

Druid Spring Boot Starter

中文 | [English](https://github.com/alibaba/druid/blob/master/druid-spring-boot-starter/README_EN.md)

Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池和监控。
druid-spring-boot-starter 适用于Spring boot 2。 如果Spring boot版本 >= 3.0.0请使用 druid-spring-boot-3-starter。

如何使用

  1. 在 Spring Boot 项目中加入druid-spring-boot-starter依赖 (点击查询最新版本)

    Maven

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

    Gradle

    xml
    compile 'com.alibaba:druid-spring-boot-starter:1.1.17'
  2. 添加配置

    xml
    spring.datasource.url= 
    spring.datasource.username=
    spring.datasource.password=
    # ...其他配置(可选,不是必须的,使用内嵌数据库的话上述三项也可省略不填)

配置属性

Druid Spring Boot Starter 配置属性的名称完全遵照 Druid,你可以通过 Spring Boot 配置文件来配置Druid数据库连接池和监控,如果没有配置则使用默认值。

  • JDBC 配置
xml
spring.datasource.druid.url= # 或spring.datasource.url= 
spring.datasource.druid.username= # 或spring.datasource.username=
spring.datasource.druid.password= # 或spring.datasource.password=
spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=
  • 连接池配置
text
spring.datasource.druid.initial-size=
spring.datasource.druid.max-active=
spring.datasource.druid.min-idle=
spring.datasource.druid.max-wait=
spring.datasource.druid.pool-prepared-statements=
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 
spring.datasource.druid.max-open-prepared-statements= #和上面的等价
spring.datasource.druid.validation-query=
spring.datasource.druid.validation-query-timeout=
spring.datasource.druid.test-on-borrow=
spring.datasource.druid.test-on-return=
spring.datasource.druid.test-while-idle=
spring.datasource.druid.time-between-eviction-runs-millis=
spring.datasource.druid.min-evictable-idle-time-millis=
spring.datasource.druid.max-evictable-idle-time-millis=
spring.datasource.druid.filters= #配置多个英文逗号分隔
....//more
  • 监控配置
text
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled= #是否启用StatFilter默认值false
spring.datasource.druid.web-stat-filter.url-pattern=
spring.datasource.druid.web-stat-filter.exclusions=
spring.datasource.druid.web-stat-filter.session-stat-enable=
spring.datasource.druid.web-stat-filter.session-stat-max-count=
spring.datasource.druid.web-stat-filter.principal-session-name=
spring.datasource.druid.web-stat-filter.principal-cookie-name=
spring.datasource.druid.web-stat-filter.profile-enable=

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled= #是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
spring.datasource.druid.stat-view-servlet.url-pattern=
spring.datasource.druid.stat-view-servlet.reset-enable=
spring.datasource.druid.stat-view-servlet.login-username=
spring.datasource.druid.stat-view-servlet.login-password=
spring.datasource.druid.stat-view-servlet.allow=
spring.datasource.druid.stat-view-servlet.deny=

# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔

Druid Spring Boot Starter 不仅限于对以上配置属性提供支持,DruidDataSource 内提供setter方法的可配置属性都将被支持。你可以参考WIKI文档或通过IDE输入提示来进行配置。配置文件的格式你可以选择.properties或.yml,效果是一样的,在配置较多的情况下推荐使用.yml。

如何配置多数据源

  1. 添加配置
xml
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

# Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖
...
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=5
...

# Druid 数据源 1 配置,继承spring.datasource.druid.* 配置,相同则覆盖
...
spring.datasource.druid.one.max-active=10
spring.datasource.druid.one.max-wait=10000
...

# Druid 数据源 2 配置,继承spring.datasource.druid.* 配置,相同则覆盖
...
spring.datasource.druid.two.max-active=20
spring.datasource.druid.two.max-wait=20000
...

强烈注意:Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效

  1. 创建数据源
java
@Primary
@Bean
@ConfigurationProperties("spring.datasource.druid.one")
public DataSource dataSourceOne(){
    return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid.two")
public DataSource dataSourceTwo(){
    return DruidDataSourceBuilder.create().build();
}

如何配置 Filter

你可以通过 spring.datasource.druid.filters=stat,wall,log4j ... 的方式来启用相应的内置Filter,不过这些Filter都是默认配置。如果默认配置不能满足你的需求,你可以放弃这种方式,通过配置文件来配置Filter,下面是例子。

xml
# 配置StatFilter 
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=h2
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

# 配置WallFilter 
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=h2
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false

# 其他 Filter 配置不再演示

目前为以下 Filter 提供了配置支持,请参考文档或者根据IDE提示(spring.datasource.druid.filter.*)进行配置。

  • StatFilter
  • WallFilter
  • ConfigFilter
  • EncodingConvertFilter
  • Slf4jLogFilter
  • Log4jFilter
  • Log4j2Filter
  • CommonsLogFilter

要想使自定义 Filter 配置生效需要将对应 Filter 的 enabled 设置为 true ,Druid Spring Boot Starter 默认禁用 StatFilter,你也可以将其 enabled 设置为 true 来启用它。

如何获取 Druid 的监控数据

Druid 的监控数据可以在开启 StatFilter 后通过 DruidStatManagerFacade 进行获取,获取到监控数据之后你可以将其暴露给你的监控系统进行使用。Druid 默认的监控系统数据也来源于此。下面给做一个简单的演示,在 Spring Boot 中如何通过 HTTP 接口将 Druid 监控数据以 JSON 的形式暴露出去,实际使用中你可以根据你的需要自由地对监控数据、暴露方式进行扩展。

java
@RestController
public class DruidStatController {
    @GetMapping("/druid/stat")
    public Object druidStat(){
        // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }
}
text
/* Detailed source-code truncated for AI context efficiency. */

IDE 提示支持

演示

克隆项目,运行test包内的DemoApplication。

参考

Druid Wiki

Spring Boot Reference


File: druid-spring-boot-starter/README_EN.md

Druid Spring Boot Starter

English | [中文](https://github.com/alibaba/druid/blob/master/druid-spring-boot-starter/README.md)

Spring Boot with Druid support, help you simplify Druid config in Spring Boot.
druid-spring-boot-starter is for Spring boot 2. If Spring boot version >= 3.0.0, please use druid-spring-boot-3-starter.

Usage

  1. Add the druid-spring-boot-starter dependency in Spring Boot project (click get last version).

    Maven

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

    Gradle

    xml
    compile 'com.alibaba:druid-spring-boot-starter:1.1.17'
  2. Add configuration properties.

    xml
    spring.datasource.url= 
    spring.datasource.username=
    spring.datasource.password=
    # ...other config (optional, use the embedded database, then the above three items can also be omitted)

Configuration Properties

Druid Spring Boot Starter properties name in full compliance with Druid configuration, you can configure the Druid database connection pool and monitor the configuration properties through the following configuration properties, using default values if not configured.

  • JDBC
xml
spring.datasource.druid.url= # or spring.datasource.url= 
spring.datasource.druid.username= # or spring.datasource.username=
spring.datasource.druid.password= # or spring.datasource.password=
spring.datasource.druid.driver-class-name= # or spring.datasource.driver-class-name=
  • Connection pool
text
spring.datasource.druid.initial-size=
spring.datasource.druid.max-active=
spring.datasource.druid.min-idle=
spring.datasource.druid.max-wait=
spring.datasource.druid.pool-prepared-statements=
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 
spring.datasource.druid.max-open-prepared-statements= #Equivalent to the above 'max-pool-prepared-statement-per-connection-size'
spring.datasource.druid.validation-query=
spring.datasource.druid.validation-query-timeout=
spring.datasource.druid.test-on-borrow=
spring.datasource.druid.test-on-return=
spring.datasource.druid.test-while-idle=
spring.datasource.druid.time-between-eviction-runs-millis=
spring.datasource.druid.min-evictable-idle-time-millis=
spring.datasource.druid.max-evictable-idle-time-millis=
spring.datasource.druid.filters= #Druid filters, default value stat, multiple separated by comma.
  • Monitor
text
# WebStatFilter properties, detail see Druid Wiki
spring.datasource.druid.web-stat-filter.enabled= #Enable StatFilter, default value false.
spring.datasource.druid.web-stat-filter.url-pattern=
spring.datasource.druid.web-stat-filter.exclusions=
spring.datasource.druid.web-stat-filter.session-stat-enable=
spring.datasource.druid.web-stat-filter.session-stat-max-count=
spring.datasource.druid.web-stat-filter.principal-session-name=
spring.datasource.druid.web-stat-filter.principal-cookie-name=
spring.datasource.druid.web-stat-filter.profile-enable=

# StatViewServlet properties, detail see Druid Wiki
spring.datasource.druid.stat-view-servlet.enabled= #Enable StatViewServlet (monitor console), default value false.
spring.datasource.druid.stat-view-servlet.url-pattern=
spring.datasource.druid.stat-view-servlet.reset-enable=
spring.datasource.druid.stat-view-servlet.login-username=
spring.datasource.druid.stat-view-servlet.login-password=
spring.datasource.druid.stat-view-servlet.allow=
spring.datasource.druid.stat-view-servlet.deny=

# With Spring monitoring properties, detail see Druid Wiki
spring.datasource.druid.aop-patterns= # Spring monitoring AOP point, such as x.y.z.service.*, multiple separated by comma.

The Druid Spring Boot Starter is not limited to support for the above configuration properties, and the configurable properties that provide the setter method in DruidDataSource will be supported. You can refer to the WIKI document or configure it via the IDE input prompt. The format of the configuration file You can choose .properties or .yml, the effect is the same, in the configuration of more cases recommend the use of .yml.

How to Configuration Multiple DataSource

  1. Add config
xml
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

# DruidDataSurce configuration, extents spring.datasource. * configuration,,  the same will be replaced.
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=5
...

# First DruidDataSurce configuration,extents spring.datasource.druid.* configuration, the same will be replaced.
...
spring.datasource.druid.one.max-active=10
spring.datasource.druid.one.max-wait=10000
...

# Second DruidDataSurce configuration,extents spring.datasource.druid.* configuration, the same will be replaced.
...
spring.datasource.druid.two.max-active=20
spring.datasource.druid.two.max-wait=20000
...

Warning: Spring Boot 2.X not support extents, please configure one by one.

  1. Create DruidDataSource
java
@Primary
@Bean
@ConfigurationProperties("spring.datasource.druid.one")
public DataSource dataSourceOne(){
    return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid.two")
public DataSource dataSourceTwo(){
    return DruidDataSourceBuilder.create().build();
}

How to Configuration Filter

You can spring.datasource.druid.filters = stat, wall, log4j, dtc. way to enable the corresponding built-in Filter, but these are the default configuration Filter. If the default configuration can not meet your needs, you can give up this way, through the configuration file to configure the Filter, the following is an example.

xml
# StatFilter configuration example.
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=h2
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

# WallFilter configuration example
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=h2
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false

# Other Filter similar.

Currently, configuration support is provided for the following filters. Please refer to the documentation or configure it according to the IDE prompt (spring.datasource.druid.filter. *).

  • StatFilter
  • WallFilter
  • ConfigFilter
  • EncodingConvertFilter
  • Slf4jLogFilter
  • Log4jFilter
  • Log4j2Filter
  • CommonsLogFilter

Druid Spring Boot Starter will forbid StatFilter by default, and you can also set its enabled to true.,make the Filter configuration take effect and need to set enabled to true.

How to get Druid monitoring(stat) data

Druid's monitoring data can be obtained through DruidStatManagerFacade after the StatFilter is enable. After obtaining the monitoring data, you can expose it to your monitoring system for use. Druid's default monitoring system data also comes from this. Let's take a simple demonstration. In Spring Boot, how to expose Druid monitoring data in the form of JSON through the HTTP interface. In actual use, you can freely expand the monitoring data and exposure methods according to your needs.

java
@RestController
public class DruidStatController {
    @GetMapping("/druid/stat")
    public Object druidStat(){
        // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }
}
text
/* Detailed source-code truncated for AI context efficiency. */

IDE Hints

Samples

Clone the project, run DemoApplication within the test package.

Reference