Alibaba Druid:Java 数据库中间件的全能选手

Druid 是阿里巴巴开源的数据库连接池和 SQL 解析器,目前斩获 28,000+ Star。

正文顶部截图

Druid 做的事情很明确:把 JDBC 连接池、SQL 解析、安全防护、监控统计整合到一个库里。

Java 项目里连接池选择不少,HikariCP 以速度见长,DBCP 历史悠久。Druid 的定位是不只管连接,还管 SQL 的解析和安全。

README区域截图

核心能力拆开看:

连接池方面,DruidDataSource 支持物理连接预热、PSCache、KeepAlive。连接池本身内置了监控,能看到每个 SQL 的执行次数、慢查询统计、连接等待时间。

SQL 解析器支持 30 种数据库方言,生成 AST 语法树,能做 SQL 格式化、改写、表名和字段提取。这些能力在数据同步和 SQL 审核场景下比较实用。

安全方面有 WallFilter,基于 AST 分析 SQL 结构,拦截注入攻击和危险操作。这比简单的正则匹配可靠得多。

Spring Boot 接入:

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

<!-- Spring Boot 3.x -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.24</version>
</dependency>

YAML 里打开监控和防火墙:

spring:
  datasource:
    druid:
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 2000
        wall:
          enabled: true

不依赖 Spring 的项目可以直接用 DruidDataSource:

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

SQL 解析器独立使用:

Druid 的解析器可以单独拿出来用,不一定要配合连接池。解析一条 SQL 获取表名和字段信息:

String sql = "SELECT id, name FROM users WHERE age > 18";
List<SQLStatement> stmts = SQLUtils.parseStatements(sql, DbType.mysql);
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(DbType.mysql);
stmts.get(0).accept(visitor);
System.out.println("Tables: " + visitor.getTables());

30 种方言覆盖了主流关系型数据库、国产数据库(达梦、GaussDB)、分析引擎(ClickHouse、Doris、StarRocks)、云原生数仓(BigQuery、Snowflake)以及 Hive、Spark、Presto 等计算引擎。

项目结构:

核心功能在 core 模块,Spring Boot 集成按版本拆成三个 Starter,druid-admin 提供集群监控管理端。基于 Apache License 2.0 开源,需要 Java 8+ 和 Maven 3.6+。

arter,druid-admin 提供集群监控管理端。基于 Apache License 2.0 开源,需要 Java 8+ 和 Maven 3.6+。

更多推荐