druid是阿里开源的一个数据库连接池,提供强大的监控和扩展能力
并且ali还为我们封装了druid的starter,自动帮我们完成了一些servlet的配置,因此我们只需要写一个配置就可以完成一个基础的sql监控功能,我们来研究下具体做了什么
maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
怎么打开Druid的监控统计功能:
Druid内置提供一个StatFilter,它的别名是stat,用于统计监控信息。
spring.datasource.druid.filters=stat,wall
怎样使用Druid的内置监控页面
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。
这个StatViewServlet的用途包括:
- 提供监控信息展示的html页面
- 提供监控信息的JSON API
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true #默认是false关闭的
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
从名字看我们就知道了,它是一个servlet,但是springboot是没有web.xml的,那么我们要怎么将这个servlet交给springboot呢?
我们通过配置进入,比如点开spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*,发现它进入了一个叫DruidStatProperties的配置类(springboot大多数starter都帮我们做了property的工作,我们就不用自己写了,只需要注入这个property就可以使用了):
public void setUrlPattern(String urlPattern) {
this.urlPattern = urlPattern;
}
我们发现这个properties被DruidDataSourceAutoConfigure自动装配了,同时这个类中导入了其他的配置:
我们点开其中的DruidStatViewServletConfiguration:
@ConditionalOnWebApplication
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
public class DruidStatViewServletConfiguration {
@Bean
public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) {
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new StatViewServlet());
registrationBean.addUrlMappings(config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*");
if (config.getAllow() != null) {
registrationBean.addInitParameter("allow", config.getAllow());
}
if (config.getDeny() != null) {
registrationBean.addInitParameter("deny", config.getDeny());
}
if (config.getLoginUsername() != null) {
registrationBean.addInitParameter("loginUsername", config.getLoginUsername());
}
if (config.getLoginPassword() != null) {
registrationBean.addInitParameter("loginPassword", config.getLoginPassword());
}
if (config.getResetEnable() != null) {
registrationBean.addInitParameter("resetEnable", config.getResetEnable());
}
return registrationBean;
}
}
我们发现,他就帮我们完成了servlet的注入工作!
内置监控中的Web和Spring关联监控怎么配置?
WebStatFilter用于采集web-jdbc关联监控的数据。
‘’
这个同样需要在xml中配置,但前面解释了,我们现在只需要在配置文件中配置就好了:
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
原理前面讲过了
于是,一个最基础的监控就配好了,框架真是方便: