druid README

The project's README from github.com/alibaba/druid. As one markdown file: README.md.

Alibaba Druid

Java CI Codecov Maven Central Last SNAPSHOT GitHub release License

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 依赖

<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
<!-- Spring Boot 3.x 示例 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.24</version>
</dependency>
# 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

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 解析器

// 解析 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());

项目模块

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

从源码构建

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 开源。

druid (alibaba/druid)

Searching Database…

28.2K ·GitHub
这是什么?Druid 是一个开源、高性能的 Java 数据库连接池和 SQL 解析器,由阿里巴巴 DataWorks 团队开发。它把 JDBC 连接池、多方言 SQL 解析与 AST 分析器、SQL 防火墙以及监控统计功能整合在一个库里。
这是独立应用,还是我要加到 Java 项目里的库?它是一个 Java 库(JAR),通过 Maven 添加到项目中,不是独立应用程序。它主要以 DruidDataSource 连接池的形式提供,另外还有一个独立的 SQL 解析模块。
怎样把 Druid 加到我的项目里?可以直接添加 druid 的 Maven 依赖;如果是 Spring Boot 项目,则使用对应的 starter:Spring Boot 2.x 用 druid-spring-boot-starter,3.x 用 druid-spring-boot-3-starter,4.x 用 druid-spring-boot-4-starter。不用 Spring 的话,也可以直接实例化 DruidDataSource。
接入 Spring Boot 应用时有什么需要注意的坑吗?你必须选择与自己 Spring Boot 主版本(2.x、3.x 或 4.x)相匹配的 starter。这三个 starter 不能互换,用错了会导致集成失败。
这个解析器支持哪些 SQL 方言?它支持 30 种方言,包括 MySQL、PostgreSQL、Oracle、SQL Server、DB2、ClickHouse、Hive、Spark、Presto、BigQuery 和 Snowflake,每种方言都有各自的词法分析器、语法分析器、AST 和 visitor。
SQL 防火墙是做什么的?WallFilter 会检查每条 SQL 语句的 AST,在语句到达数据库之前,拦截 SQL 注入尝试和其他危险操作。
我能监控连接池和 SQL 执行情况吗?可以。内置的 StatFilter 会收集实时的 SQL 执行和连接池统计信息,并提供一个开箱即用的 Web 监控页面。
Druid 支持跨多个数据库的故障转移吗?支持。HighAvailableDataSource 可以在多个底层数据源之间提供负载均衡、健康检查和自动故障转移。
What are similar projects?Chat2DB, HikariCP, APIJSON, dbeaver, dbx, mybatis-plus, dataease, navop
Creator
alibaba
Size
91.8 MB
Stars
28.2K
Age
14y
Commits · 90 Days