Druid数据源
- 官方地址
- GitHub:https://github.com/alibaba/druid
- 中文文档:常见问题 · alibaba/druid Wiki · GitHub
- springboot的使用:druid/druid-spring-boot-starter at master · alibaba/druid · GitHub
- 导入依赖
- Spring Boot 2.5.2版本导入下面的druid 1.1.17依赖并不能使用监控功能
- 使用相同版本的druid-spring-boot-starter可以使用监控功能。
XML
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
- XML方式配置数据源
XML
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
</bean>
- 配置类方式配置数据源
java
//默认的自动配置是判断容器中没有才会配@ConditionalOnMissingBean(DataSource.class)
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
//要么ConfigurationProperties配置文件配置,要么手动set
//druidDataSource.setUrl();
//druidDataSource.setUsername();
//druidDataSource.setPassword();
//wall是加入监控防火墙
//stat是加入监控统计功能
//多个值用","分割
druidDataSource.setFilters("stat,wall");
druidDataSource.setMaxActive(10);
return druidDataSource;
}
- StatViewServlet的用途
- 内置监控页面的首页是**/druid/index.html**
- 提供监控信息展示的html页面
- 提供监控信息的JSON API
java
//配置 druid的监控页功能
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> registrationBean =
new ServletRegistrationBean<>(statViewServlet, "/druid/*");
//监控页登录用户
registrationBean.addInitParameter("loginUsername","admin");
registrationBean.addInitParameter("loginPassword","123456");
return registrationBean;
}
- StatFilter
- 用于统计监控信息;如SQL监控、URI监控
- 系统中所有filter
|---------------|---------------------------------------------------------|
| 别名 | Filter类名 |
| default | com.alibaba.druid.filter.stat.StatFilter |
| stat | com.alibaba.druid.filter.stat.StatFilter |
| mergeStat | com.alibaba.druid.filter.stat.MergeStatFilter |
| encoding | com.alibaba.druid.filter.encoding.EncodingConvertFilter |
| log4j | com.alibaba.druid.filter.logging.Log4jFilter |
| log4j2 | com.alibaba.druid.filter.logging.Log4j2Filter |
| slf4j | com.alibaba.druid.filter.logging.Slf4jLogFilter |
| commonlogging | com.alibaba.druid.filter.logging.CommonsLogFilter |
java
//WebStatFilter 用于采集web-jdbc关联监控的数据。
@Bean
public FilterRegistrationBean webStatFilter(){
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
new FilterRegistrationBean<>(webStatFilter);
//过滤所有
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
//排除过滤的路径
filterRegistrationBean.addInitParameter(
"exclusions",
"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
Druid-starter自动配置原理
- 引入starter依赖
XML
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
- DruidDataSourceAutoConfigure
- 配置文件配置 spring.datasource.druid 或 spring.datasource
- 需要配置在springboot官方数据源之前,也就是在spring-boot-starter-data-jdbc之前引入依赖

- DruidSpringAopConfiguration.class
- 监控SpringBean的
- 配置项:spring.datasource.druid.aop-patterns

- DruidStatViewServletConfiguration.class
- 监控页的配置:spring.datasource.druid.stat-view-servlet;默认开启

- DruidWebStatFilterConfiguration.class
- web监控配置;spring.datasource.druid.web-stat-filter;默认开启

- DruidFilterConfiguration.class
- 所有Druid自己filter的配置

- 配置文件示例
bash
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
druid:
aop-patterns: com.my.admin.* #监控SpringBean
filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)
stat-view-servlet: # 配置监控页功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter: # 监控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: # 对上面filters里面的stat的详细配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false