每一年都奔走在自己热爱里

 
没有人是一座孤岛,总有谁爱着你

【springboot-Druid 数据库性能监控】

【Durid是阿里一款比较好用的开源软件,很多项目中都用的到Durid连接池,今天记录一下Durid的SQL监控功能】

前提:已有能运行的SpringBoot工程

1. 引入pom.xml依赖

 <!--引入druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

2. 添加application.properties配置文件

配置 WebStatFilter,WebStatFilter 用于采集 web-jdbc 关联监控的数据
# 启用 WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# 配置拦截规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 排除一些不必要的 url,这些 URL 不会涉及到 SQL 查询
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# 开启 session 统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
# 缺省 sessionStatMaxCount 是 1000 个,我们可以按需要进行配置
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
# 配置 principalSessionName,使得 druid 能够知道当前的 session 的用户是谁
# 根据需要,这个参数的值是 user 信息保存在 session 中的 sessionName
#spring.datasource.druid.web-stat-filter.principal-session-name=
# 下面这个配置的作用和上面配置的作用类似,这个是通过 Cookie 来识别用户
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
# 开启 profile 后就能够监控单个 URL 地址调用列表
#spring.datasource.druid.web-stat-filter.profile-enable=

配置 StatViewServlet 开启
# 启用内置的监控页面
spring.datasource.druid.stat-view-servlet.enabled=true
# 内置监控页面的地址
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 开启 Reset All 功能
spring.datasource.druid.stat-view-servlet.reset-enable=true
# 设置登录用户名
spring.datasource.druid.stat-view-servlet.login-username=javaboy
# 设置登录密码
spring.datasource.druid.stat-view-servlet.login-password=123
# 白名单(如果allow没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# 黑名单(deny 优先于 allow,如果在 deny 列表中,就算在 allow 列表中,也会被拒绝)
spring.datasource.druid.stat-view-servlet.deny=

3. 启动 Spring Boot 进行测试

Spring Boot 项目启动成功后,首先访问如下地址

http://ip:host/项目路径/druid/login.html

4. 在自己的web项目中自定义集成SQL监控结果

从上图中可以看到Durid Monitor的监控数据来自/druid/sql.json接口,后台从此接口中获取结果,选取其中的数据项,结合自己的web项目

package com.atguigu.springboot.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }
    //配置Druid监控
    /**
     * 1、配置管理后台的Servlet
     * 2、配置一个Web监控的filter
     */
    //配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet(){
        ServletRegistrationBean<StatViewServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//        Map<String,String> initParams=new HashMap<>();
        //增加配置
//        initParams.put("loginUsername","admin");//登录key 固定的loginUsername
//        initParams.put("loginPassword","123456");//登录密码 固定loginPassword
//        initParams.put("allow",""); //允许谁可以访问,默认都可访问
//        initParams.put("deny","172.16.208.208");//禁止谁能访问
        
        //bean.setInitParameters(initParams); //初始化参数
        servletServletRegistrationBean.addInitParameter("loginUsername","admin");
        servletServletRegistrationBean.addInitParameter("loginPassword","123456");
        servletServletRegistrationBean.addInitParameter("allow","");
        servletServletRegistrationBean.addInitParameter("deny","172.16.208.208");
        return servletServletRegistrationBean;
    }
    //配置一个Web监控的filter
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter(){
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.css,*.png,*.jpg,*.js,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        bean.setInitParameters(initParams);
        //添加过滤规则
//        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息
//        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return  bean;
    }
    
}

测试:启动项目,随意执行某条Sql,再刷新页面就能看到结果
posted @ 2021-04-12 20:46  与乐i  阅读(157)  评论(0编辑  收藏  举报
Live2D
// 生成目录索引列表 //侧边栏目录索引