1.Druid简介
Druid是阿里巴巴一款开源的数据库连接池项目。其在监控、可扩展、稳定性和性能方面具有明显的优势。通过其提供的监控功能,可以实现观察数据库连接池和SQL查询的工作情况。Druid是一个JDBC组件,主要包括以下三个部分。
DruidDriver:代理Driver,能够提供基于Filter-Chain模式的插件体系。
DruidDataSource:高效可管理的数据库连接池。
SQLParser:支持所有JDBC兼容的数据库,包括Oracle、MySQL和SQL Server等。

2.引入依赖
新建一个SpringBoot工程,并在pom.xml文件中添加集成Druid所需要的dependency。

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>

3.添加配置
在application.properties文件中添加如下配置信息。

############################################################
#
# Druid配置
#
############################################################
### 数据源类别
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
### 初始化大小、最小、最大
spring.datasource.initialSize = 5
spring.datasource.minIdle = 5
spring.datasource.maxActive = 20
### 配置获取连接等待超时的时间,单位毫秒
spring.datasource.maxWait = 60000
### 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
spring.datasource.timeBetweenEvictionRunsMillis = 60000
### 配置一个连接在池中最小生存时间,单位毫秒
spring.datasource.minEvictableIdleTimeMillis = 300000
spring.datasource.validationQuery = select 1 from dual
spring.datasource.testWhileIdle = true
spring.datasource.testOnBorrow = false
spring.datasource.testOnReturn = false
### 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements = true
spring.datasource.maxPoolPreparedStatementPerConnectionSize = 20
### 配置监控统计拦截的filters,去掉后监控界面sql无法统计,wall用于防火墙
spring.datasource.filters = stat,wall,log4j
### 通过connectProperties属性来打开mergeSql功能、慢SQL记录
spring.datasource.connectionProperties = druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
### 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

4.开启监控
Druid提供了两种开启监控的方式,一种是使用原生的Servelet和Filter方式,然后通过@ServletComponentScan启动扫描包进行处理。另一种是使用代码注册Servelet和Filter的处理方式。本专栏使用第二种方式实现。
在项目目录“/src/main/java/com/leichuangkj/druid”下新建“filter”目录,并在filter目录下新建DruidMonitorConfiguration配置类,具体代码如下。

@Configuration
public class DruidMonitorConfiguration {
@Bean
public ServletRegistrationBean druidStatView(){
//使用ServletRegistrationBean进行注册
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//白名单
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//IP黑名单(共存时,deny优先于allow),如果满足deny的话,会提示"Sorry, you are not permitted to view this page."
servletRegistrationBean.addInitParameter("deny","192.168.124.7");
//登录查看信息的账号和密码
servletRegistrationBean.addInitParameter("loginUsername","root");
servletRegistrationBean.addInitParameter("loginPassword","admin123");
//是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}

@Bean
public FilterRegistrationBean druidStatFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
//添加需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}

}

5.测试

在DruidMonitorConfiguration类开发完成后,重新启动项目,然后通过网址“http://localhost:8080/druid/index.html”打开监控登录界面,使用配置类中的账号和密码进行登录。登录成功后,在Druid的监控界面,可以对数据源、SQL、Web应用进行监控。登录和监控界面如下图所示。

12.集成数据库监控组件Druid_sql


12.集成数据库监控组件Druid_spring_02

6.工程目录结构

12.集成数据库监控组件Druid_sql_03