Druid是什么?
Druid有两个“同名不同姓”的版本,这里重点说阿里巴巴的Druid——它就像是程序员手里的“数据库管家”,专门管两件事:
高效管理数据库连接:比如你开了一家奶茶店,客人多的时候,Druid能快速调配服务员(数据库连接),避免客人排队等太久。
监控数据库健康:它还是个“监控摄像头”,能记录谁在查数据库、查得慢不慢、有没有人搞破坏。
注意:别和另一个叫Apache Druid的大数据分析工具搞混了,那个是处理海量实时数据的,和数据库连接池无关。
Druid有什么用?
核心功能
连接池管理: 解决传统连接池(如C3P0、DBCP)的性能问题,支持高并发场景,比如双11每秒处理上万订单。
**性能监控:**统计每条SQL的执行时间、调用次数,帮你找出“拖后腿”的慢查询,比如发现某条SQL平均耗时2秒,赶紧优化。
**安全防护:**支持数据库密码加密(避免密码明文写在代码里),还能防SQL注入攻击,像给数据库加了把锁。
**日志记录:**记录所有数据库操作,方便排查问题,比如发现某用户凌晨3点疯狂删数据,立马追责 。
实际场景
电商系统:高峰期每秒处理上千订单,Druid确保数据库不被压垮。
企业后台:管理员监控哪些SQL最耗资源,优化后服务器成本降一半。
金融系统:通过加密和审计日志,满足合规要求。
Druid怎么用?三步走:装插件→配参数→开监控
1. 安装依赖
在Java项目的pom.xml里加Druid依赖(相当于装个插件):
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.16</version>
</dependency>
配置连接池
创建一个druid.properties文件(类似给管家定规则):
# 数据库地址、账号密码
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456 # 连接池参数
initialSize=5 # 开业时先雇5个服务员
maxActive=20 # 最多雇20个
maxWait=5000 # 客人最多等5秒
filter=stat # 开启监控功能
代码调用
用Java代码启动Druid(就像按下管家工作按钮):
public class DruidDemo { public static void main(String[] args) throws Exception { // 1. 加载配置文件 Properties props = new Properties(); props.load(DruidDemo.class.getResourceAsStream("druid.properties")); // 2. 创建连接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(props); // 3. 获取数据库连接 Connection conn = dataSource.getConnection(); System.out.println("连接成功!"); }
}
开启监控面板
在web.xml里加配置(装个监控屏幕):
<servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern>
</servlet-mapping>
访问http://你的服务器/druid/index.html,就能看到实时监控数据。
注意事项
别用默认账号密码:监控页面记得改登录账号,否则黑客可能偷看你的数据库信息。
定期查慢SQL:监控页面的“SQL监控”标签里,红色标记的慢查询优先优化 。
密码加密:用ConfigTools.encrypt()加密密码,配置文件里写加密后的值 。
Druid是Java程序连接数据库的“超级管家”,管连接、管监控、管安全。
用起来三步:加依赖→写配置→调代码,半小时就能搞定。
适用场景:所有用数据库的Java项目,尤其是高并发、重安全的系统。