Druid官方使用手册,或者中文手册。外网github,可能打不开。
基本介绍
1.HiKariCP:目前市面上非常优秀的数据源,是springboot2默认数据源
2.Druid:性能优秀,Druid提供性能卓越的连接池功能外,还集成了SQL监控,黑名单拦截等功能,强大的监控特性,通过Drud提供的监控功能,可以清楚知道连接池和SQL的工作情况,所以根据项目需要,我们也要掌握Druid和SpringBoot整合
3.整合Druid到Spring-Boot方式
自定义方式
引入starter方式
Druid的配置
pom.xml引入Druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
创建Druid的配置类
@ConfigurationProperties("spring.datasource")是为了获取application.yml中的配置信息
配置DruidDataSource以后,就自动不使用HikariDataSource。
是靠@ConditionalOnMissingBean判断没有DataSource就使用默认来取舍数据源的。
@Configuration
public class DruidDataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setFilters("stat,wall");//配置一个StatFilter过滤器和wall防火墙。
return druidDataSource;
}
}
Druid监控功能-SQL监控
需求:配置Druid的监控功能,包括SQL监控、SQL防火墙、Web应用,Session监控等
配置监控页面访问密码
增加监控功能
需要配置Servlet的 loginUsername 和 loginPassword这两个初始参数。
具体可以参考: 为Druid监控配置访问权限(配置访问监控信息的用户与密码)
示例如下:
<!-- 配置 Druid 监控信息显示页面 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 允许清空统计数据 -->
<param-name>resetEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>druid</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>druid</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
因为没有web.xml文件,我们使用的是在注册类中配置
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> statViewBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*");
statViewBean.addInitParameter("loginUsername","stein");
statViewBean.addInitParameter("loginPassword","666666");
return statViewBean;
}
配置一个StatFilter,用于统计监控信息。
别名配置
StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar!/META-INF/druid-filter.properties。
在spring中使用别名配置方式如下:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
... ...
<property name="filters" value="stat" />
</bean>
采用注册类配置。只需在上面注册@Bean的方法中添加
druidDataSource.setFilters("stat");//配置一个StatFilter,用于统计监控信息。
然后使用一个controller收发数据,让StatFilter监控到
@Controller
public class DruidSqlController {
@Resource
private JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/sql")
public List<Furn> crudDB(){
String sql="SELECT * FROM `furn`";
BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);
List<Furn> furns = jdbcTemplate.query(sql, rowMapper);
for (Furn furn : furns) {
System.out.println(furn);
}
return furns;
}
}
Druid监控功能-Web关联监控
作用:WebStatFilter用于采集web-jdbc关联监控的数据。可以查看是否遭到攻击。
Web.xml方式配置
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
使用配置类方式配置
@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监控功能-SQL防火墙
怎么配置防御SQL注入攻击
Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。具体配置看这里: https://github.com/alibaba/druid/wiki/配置-wallfilter
Web.xml方式配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
...
<property name="filters" value="wall"/>
</bean>
使用配置类方式配置
依然在DruidDataSource里面配置
druidDataSource.setFilters("wall");//可以联合添加
Druid监控功能-Session监控
监控的是用户的session,而不是登录druid的session。
Druid监控功能-使用Druid-Spring-Boot-Starter配置
文档:Druid Spring Boot Starter
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
基本介绍:
1.前面我们使用的是自己引入druid+配置类方式整合Druid和监控
2.Druid-Spring-Boot-Starter可以让程序员在Spring Boot项目中更加轻松集成Druid和监控
操作步骤:
恢复成默认状态
修改pom.xml 注销druid的依赖
注销整个DruidDataSourceConfig配置类
运行测试是否已经恢复到原有Tomcat+HikariDataSource的配置
application.xml配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&charactorEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
druid:
stat-view-servlet:
enabled: true
login-username: jackie
login-password: 888
reset-enable: false
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
filter:
stat:
enabled: true
log-slow-sql: true
slow-sql-millis: 1000
wall:
enabled: true
config:
drop-table-allow: false
//select-all-column-allow: false