SpringBoot-数据访问之Druid
Druid数据源
1. 官方地址
- GitHub:https://github.com/alibaba/druid
- 中文文档:常见问题 · alibaba/druid Wiki · GitHub
- springboot的使用:druid/druid-spring-boot-starter at master · alibaba/druid · GitHub
2. 导入依赖
- Spring Boot 2.5.2版本导入下面的druid 1.1.17依赖并不能使用监控功能
- 使用相同版本的druid-spring-boot-starter可以使用监控功能。
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version>
</dependency>
3. 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>
4. 配置类方式配置数据源
//默认的自动配置是判断容器中没有才会配@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;
}
5. StatViewServlet的用途
- 内置监控页面的首页是/druid/index.html
- 提供监控信息展示的html页面
- 提供监控信息的JSON API
//配置 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;
}
6. 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 |
//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自动配置原理
1. 引入starter依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version>
</dependency>
2. DruidDataSourceAutoConfigure
- 配置文件配置 spring.datasource.druid 或 spring.datasource
- 需要配置在springboot官方数据源之前,也就是在spring-boot-starter-data-jdbc之前引入依赖

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

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

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

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

7. 配置文件示例
spring:datasource:url: jdbc:mysql://localhost:3306/db_accountusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverdruid:aop-patterns: com.my.admin.* #监控SpringBeanfilters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)stat-view-servlet: # 配置监控页功能enabled: truelogin-username: adminlogin-password: adminresetEnable: falseweb-stat-filter: # 监控webenabled: trueurlPattern: /*exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'filter:stat: # 对上面filters里面的stat的详细配置slow-sql-millis: 1000logSlowSql: trueenabled: truewall:enabled: trueconfig:drop-table-allow: false
