Druid 是阿里提供的比较专业的可视化web、DB监控工具,基于标准SpringWeb的集成方式,Druid的官网手册写的非常明晰了,本人在使用SpringBoot进行集成的时候,遇到了一些问题,并且扎到了解决方案。
1. 搭建SpringBoot的基础框架,本人这里配置了Mysql数据库、Web(这个不是本文重点)
2. 引入Druid
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency>
3. 增加Servlet
@WebServlet(urlPatterns = "/druid/*",
initParams = {
@WebInitParam(name = "loginUsername", value = "druid"),
@WebInitParam(name = "loginPassword", value = "druid"),
@WebInitParam(name = "resetEnable", value = "false"),
}
)
public class DruidStatView extends StatViewServlet {
private static final long serialVersionUID = 1L;
}
这里指定了用户名和密码都是druid
4. 启动类增加对Servlet的扫描,@ServletComponentScan,默认情况下该注释扫描启动类所在包及其所有子包,可通过basePackages、basePackageClasses 重新指定
5. 增加 Filter
@WebFilter(urlPatterns = "/*",
initParams = {
@WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"),
}
)
public class DruidWebStatFilter extends WebStatFilter{
}
6. 配置DB,这里使用了yml格式的配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.name}
username: ${mysql.username}
password: ${mysql.password}
filters: stat,wall,log4j
注意:type: com.alibaba.druid.pool.DruidDataSource,可以不指定driverClassName,Druid会自动匹配
7. 到此,Druid 的基本配置已经好了,启动应用,访问http://localhost:8080/druid 输入用户名和密码之后,可以看到相关界面了。但是这里有几个问题:
1) 【SQL监控】没有起作用,表现是 【数据源】标签下的【* filter类名】没有信息
2) 【Spring监控】没有内容,(这个是没有配置)
8. 【Spring监控】的配置
@Bean
public DruidStatInterceptor druidStatInterceptor() {
return new DruidStatInterceptor();
}
@Bean
public JdkRegexpMethodPointcut druidStatPointcut() {
JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
String patterns = "com.lsc.learn.spring.druid.*";
druidStatPointcut.setPatterns(patterns);
return druidStatPointcut;
}
@Bean
public Advisor druidStatAdvisor() {
return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
}
9. 【SQL监控】的配置(本文重点)
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
即需要明确写明DataSource,具体什么原因就不清楚了,还望了解的大神讲解一下。
10. 这里只讲述了如何在springboot中集成druid,其他druid的内容请参照Druid的官方手册