自定义方式整合druid数据源_整合第三方场景
整合Druid数据源有两种形式:一种是自己手写自定义的各项配置,一种是使用对应的starter场景
1、自定义方式整合
首先引入druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
然后进入druid官方地址,https://github.com/alibaba/druid.找到中文文档看怎么使用
然后编写Druid的配置类
在SpringBoot中已经在配置文件中写了连接的url、username等信息,而druid同时需要,就能把组件跟配置项绑定,省去自己写。
@Configuration
public class MyDataSourceConfiguration {
?
? ?@ConfigurationProperties("spring.datasource")
? ?@Bean
? ?public DataSource druidDataSource() throws SQLException {
? ? ? ?DruidDataSource druidDataSource = new DruidDataSource();
? ? ? ?druidDataSource.setFilters("stat");
? ? ? ?druidDataSource.setFilters("wall");
? ? ? ?return druidDataSource;
? }
}
然后可以通过测试类看看是不是把数据源替换成功了。因为在添加Hikari组件的方法上面有 @ConditionalOnMissingBean(DataSource.class) ,如果添加了别的类型的数据源就肯定被替换。
测试类中
@Autowired
JdbcTemplate jdbcTemplate;
?
@Autowired
DataSource dataSource;
?
@Test
public void testDataSource(){
? ?log.info("数据源类型是:{}",dataSource.getClass());
? ?List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_category");
? ?for (Map<String, Object> map : maps) {
? ? ? ?log.info("查到的记录:{}",map);
? }
}
然后可以根据Druid官方文档试试它的监测页面
开启监测功能和检测页面、开启防火墙_StatFilter
根据文档说法就是通过set方法设置一个值为 stat 的filter就能开启监控统计功能
开启监测统计页面就是在ApplicationContext中添加一个Servlet -> StatViewServlet .设置拦截路径为 /druid/*
开启防火墙就是通过set方法设置值为 wall 的filter即开启防火墙
配置类中
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource druidDataSource() throws SQLException {
? ?DruidDataSource druidDataSource = new DruidDataSource();
? ?druidDataSource.setFilters("stat");
? ?druidDataSource.setFilters("wall");
? ?return druidDataSource;
}
//开启监控统计里面的登录注册,需要配置Servlet的 loginUsername 和 loginPassword这两个初始参数。
? ?@Bean
? ?public ServletRegistrationBean druidStatViewServlet(){
? ? ? ?StatViewServlet statViewServlet = new StatViewServlet();
? ? ? ?ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(statViewServlet, "/druid/*");
? ? ? ?servletRegistrationBean.addInitParameter("loginUsername","liuneng");
? ? ? ?servletRegistrationBean.addInitParameter("loginPassword","123456");
? ? ? ?return servletRegistrationBean;
? }
做完这两项后就能通过 http://localhost:8080/druid 访问监控统计页面
开启后要通过请求完成访问数据库,才能看出来效果
@Autowired
JdbcTemplate jdbcTemplate;
?
@ResponseBody
@RequestMapping("/sql")
public String queryData() {
? ?return jdbcTemplate.queryForObject("select count(*) from t_category", String.class);
}
开启web关联监控配置_WebStatFilter
添加一个初始化参数 exclusions 值为 *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* ,再设置拦截路径 /*
通过 FilterRegistrationBean 完成
@Bean
public FilterRegistrationBean druidFilterRegistrationBean(){
? ?WebStatFilter webStatFilter = new WebStatFilter();
? ?FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(webStatFilter);
? ?filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
? ?filterRegistrationBean.addInitParameter("exclusions",
? ? ? ? ? ?"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
? ?return filterRegistrationBean;
}
2、starter方式
1、引入依赖
根据官方文档介绍,找到对应druid版本的starter 的maven依赖地址。
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
地址后面下面就是对应的如何配置的文档。
<!--引入druid的starter场景-->
<dependency>
? ?<groupId>com.alibaba</groupId>
? ?<artifactId>druid-spring-boot-starter</artifactId>
? ?<version>1.2.6</version>
</dependency>
2、处理之前写的配置类和引入的多余的依赖
可以注释掉或者在配置类上面加 @Deprecated 使该类过时。注掉 @Configuration
3、观察starter包里面的配置类
druid-spring-boot-starter包里面的内容
@Configuration
//必须有druid的数据源,starter中有
@ConditionalOnClass(DruidDataSource.class)
//要在SpringBoot中的数据源配置类加载前加载,因为SpringBoot配置类里面已经配置了一个数据源,Hikari
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
//一些绑定配置类,根据需要查看文档和源码更改配置文件属性
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
//引入了这些类
@Import({DruidSpringAopConfiguration.class, ?//负责Spring监控
? ?DruidStatViewServletConfiguration.class, ?//监控页面
? ?DruidWebStatFilterConfiguration.class, ?//监控功能
? ?DruidFilterConfiguration.class}) ?//其他功能
public class DruidDataSourceAutoConfigure {}
?
-
DruidSpringAopConfiguration 负责Spring监控配置,跟配置文件中的 spring.datasource.druid.aop-patterns 绑定,可以设置监控的资源路径 -
DruidStatViewServletConfiguration 负责监控页面的配置,跟配置文件中的 spring.datasource.druid.stat-view-servlet.enabled 属性绑定,默认值是true,就是监控页面默认开启 -
DruidWebStatFilterConfiguration 负责监控功能配置,跟配置文件中的 spring.datasource.druid.web-stat-filter.enabled 绑定,可以设置监控的相关配置 -
DruidFilterConfiguration 负责实现其他功能,默认实现了 ? ?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 = FILTER_WALL_PREFIX + ".config";
在看完配置类后,就能自己根据配置类和官方文档提示进行配置
4、进行配置
#durid-starter 场景配置
druid:
?#开启监控页面并设置登陆用户和密码
stat-view-servlet:
? enabled: true
? login-username: admin
? login-password: 123456
?#开启监控功能设置监控路径和方形路径,内容可以去配置类里面复制
web-stat-filter:
? enabled: true
? url-pattern: /*
? exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
?#设置Spring监控路径
aop-patterns: com.xl.mini.*
?#设置其他种类的监控功能,防火墙和sql监控
filters: wall,stat,slf4j
更多的功能属性配置可以根据需要对照文档中属性进行设置对应的值
|