Alibaba Druid
“Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生, 内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置 Logging能诊断Hack应用行为。”这是来自Alibaba Druid 官方介绍。正如官方介绍的一样,它的主要功能如下几点:
- 详细的监控
- ExceptionSorter,针对主流数据库的返回码都有支持
- SQL 防注入
- 内置加密配置
- 众多扩展点,方便进行定制
我们有两种方式去配置Alibaba Druid。
第一种是直接配置 DruidDataSource 。
第二种是通过 druid-spring-boot-starter 来配置,即通过配置文件application.properties来配置。
spring.output.ansi.enabled=ALWAYS
spring.datasource.url=jdbc:h2:mem:foo
spring.datasource.username=sa
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==
spring.datasource.druid.initial-size=5 //初始的连接池大小
spring.datasource.druid.max-active=5 //最大活跃连接数
spring.datasource.druid.min-idle=5 //最小的idle
//Filter 配置
spring.datasource.druid.filters=conn,config,stat,slf4j //全部使⽤用默认值(config:实现密码加解密 stat:统计功能 slf4j:输出日志)
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key} //
spring.datasource.druid.filter.config.enabled=true //
spring.datasource.druid.test-on-borrow=true //获取连接池进行检查
spring.datasource.druid.test-on-return=true //归还连接池进行检查
spring.datasource.druid.test-while-idle=true //在idle的时候进行检查
//SQL 防注⼊
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=h2 //数据库使用h2
spring.datasource.druid.filter.wall.config.delete-allow=false //不能做删除操作
spring.datasource.druid.filter.wall.config.drop-table-allow=false //不能做删表的操作
//密码加密
spring.datasource.password=<加密密码>
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=<public-key>
Druid的扩展点为3大点:
- 用于定制连接池操作的各种环节
- 可以继承 FilterEventAdapter 以便方便地实现 Filter
@Slf4j
public class ConnectionLogFilter extends FilterEventAdapter {
@Override
public void connection_connectBefore(FilterChain chain, Properties info) {
log.info("BEFORE CONNECTION!");
}
@Override
public void connection_connectAfter(ConnectionProxy connection) {
log.info("AFTER CONNECTION!");
}
}
我们可以看到,每次建立连接之前和之后都会在控制台输出日志
使用Alibaba Druid的时候,我们需要在pom文件把HikariCP排除掉
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<artifactId>HikariCP</artifactId>
<groupId>com.zaxxer</groupId>
</exclusion>
</exclusions>
</dependency>
然后,再引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
- 修改 META-INF/druid-filter.properties 增加 Filter 配置