一,前言
关于druid,相信大家都已经很熟悉了,这是阿里开源的一个数据库连接池,但是它又不仅仅是一个数据库连接池,它具有一系列的JDBC组件库,同时也是一个SQL 解析器。
具有如下优势:
1强大的监控特性,我们可以通过druid的后台监控,可以清楚知道连接池和sql的运行情况;
2扩展性高,Druid提供了Filter-Chain模式的扩展API,我们可以自己编写Filter拦截JDBC中的任何方法,也可以自己编写Servlet后台监控实现定制化;
3集合了开源和商业数据库连接池的优秀特性;
本章,我们就来整合druid数据库连接池,并编写Servlet和Filter类来实现定制化。
二,实战
1引入pom文件(进入GitHub中管理的druid项目)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
2配置数据源
这里需要说明,在url中加入serverTimezone=UTC,是因为mysql默认是美国时区,需要切换到中国时区,否则会报错
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://192.168.43.201:3306/chen?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#type,springboot 中默认使用Tomcat作为数据源类型,这里需要进行变更
# druid配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3 配置Servlet后台管理&Filter监控
注意:在配置文件中最好使用yml格式,方便使用configurationProperites注解引入配置
@Configuration
public class DruidConfig {
//利用注解,将我们在配置文件中的配置引入进来,
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
//配置Druid的监控
//1配置管理后台的Servlet,
//2配置监控的filter
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean= new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//设置初始化参数
Map<String,String> initParams=new HashMap<>();
//将初始化参数放入到该Map中
initParams.put("loginUsername","admin");
initParams.put("loginPassword","123456");
initParams.put("allow","");//默认允许所以访问
initParams.put("deny","192.168.12.12");//拒绝192.168.12.12访问
bean.setInitParameters(initParams);
return bean;
}
//配置监控的Filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean=new FilterRegistrationBean();
//设置过滤的Filter组件
bean.setFilter(new WebStatFilter());
//设置初始化参数
Map<String,String> initParams=new HashMap<>();
//设置不拦截哪些内容 静态文件请求和druid路径下的所有请求,这些请求下的sql将无法被统计
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
//过滤的请求,
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
4启动Springboot应用
输入localhost:8080/druid,即可自动进入druid登录界面,如下:
输入在前面设置的用户名密码,即可进入如下界面
5测试SQL监控
访问一个请求执行sql命令之后,查看sql监控
需要注意的是,如果在配置文件中不配置filters选项,那么就无法对sql进行监控