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应用进行监控。登录和监控界面如下图所示。
在这里插入图片描述
在这里插入图片描述

6.工程目录结构
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐