Alibaba Druid:Java 数据库中间件的全能选手
Alibaba Druid:Java 数据库中间件的全能选手
Druid 是阿里巴巴开源的数据库连接池和 SQL 解析器,目前斩获 28,000+ Star。

Druid 做的事情很明确:把 JDBC 连接池、SQL 解析、安全防护、监控统计整合到一个库里。
Java 项目里连接池选择不少,HikariCP 以速度见长,DBCP 历史悠久。Druid 的定位是不只管连接,还管 SQL 的解析和安全。

核心能力拆开看:
连接池方面,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+。
更多推荐


所有评论(0)