人性在任何时候都可以很强大 —— 致1024 程序员节
本篇文章主要介绍的是 通过 starter 的方式整合 druid 数据源
1. 第一步:引入依赖
在项目的配置文件 pom.xml 文件中引入 druid-spring-boot-starter
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
注意:导入依赖后,要使用 Reload 重新加载一下项目,不然导入的依赖会爆红,方法如下:
分析 DruidDataSourceAutoConfigure.class 自动配置原理:
一、分析自动配置执行条件
- @ConditionalOnClass({DruidDataSource.class}) —— 容器中必须有DruidDataSource.class
- @AutoConfigureBefore({DataSourceAutoConfiguration.class}) —— 我们的自动配置在官方的之前,即排在官方的前面,用我们的自动配置不用官方的
- @EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class}) —— 扩展配置
因此,得到了 Druid 扩展配置项为 spring.datasource.druid
(DruidStatProperties.class 中声明)
@ConfigurationProperties("spring.datasource.druid")
二、分析 import 导入
@Import({
DruidSpringAopConfiguration.class,
DruidStatViewServletConfiguration.class,
DruidWebStatFilterConfiguration.class,
DruidFilterConfiguration.class})
1. DruidSpringAopConfiguration.class
@ConditionalOnProperty({"spring.datasource.druid.aop-patterns"})
用于监控 spring 组件,配置项为 spring.datasource.druid.aop-patterns
2. DruidStatViewServletConfiguration.class,
@ConditionalOnProperty(
name = {"spring.datasource.druid.stat-view-servlet.enabled"},
havingValue = "true"
)
用于进行监控页的配置(配置监控页账号、密码等),默认开启,其配置项为 spring.datasource.druid.stat-view-servlet
3. DruidWebStatFilterConfiguration.class
@ConditionalOnProperty(
name = {"spring.datasource.druid.web-stat-filter.enabled"},
havingValue = "true"
)
用于配置 Druid 监控统计功能,默认开启,配置项为 spring.datasource.druid.web-stat-filter
4. DruidFilterConfiguration.class
用于配置 Druid 的所有自己官方提供的 filter 的配置,具体如下:
private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";
private static final String FILTER_WALL_CONFIG_PREFIX = "spring.datasource.druid.filter.wall.config";
2. 第二步:自定义配置
分析了其自动配置原理后,我们可以在 application.yaml 文件中自定义 Druid 相关配置,代码示例如下,具体功能见注释:
spring:
datasource: # 配置数据库属性
url: jdbc:mysql://localhost:3306/practice
username: root
password: 5201314love
driver-class-name: com.mysql.jdbc.Driver
druid: # Druid 所有的配置都以 spring.datasource.druid 开头
aop-patterns: com.wanqing.admin.* # 配置 aop 功能,监控整个 admin 文件
filters: stat, wall # 配置开启哪些 Druid 提供我们的 filter, 用逗号隔开
filter: # 配置单个 filer 的属性
stat:
slow-sql-millis: 2000 # 超过 2000 ms 的查询都是慢查询
log-slow-sql: true # 将慢查询记录到日志
wall:
enabled: true
config:
drop-table-allow: true # 防火墙不容许删表
stat-view-servlet: # 配置监控页的功能
enabled: true # 开启功能,默认开启
login-username: wanqing # 配置登录名
login-password: 5201314love # 配置密码
reset-enable: false # 重置按钮关闭
web-stat-filter: # 配置 web 监控的功能
enabled: true
url-pattern: /* # 要监控所有 /xx 的请求
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' # 要排除的请求