zoukankan      html  css  js  c++  java
  • 在SpringBoot使用Druid进行数据监控

    前言

    之前在构建项目初始设计的时候在选择数据库连接的时候就看到Druid有这样的强大的功能。数据监控。对于一个项目来说,数据监控特别重要,之前使用对于数据库的监控都是通过mysql的日志等系统来完成的。而Druid之所以强大,是因为它的监控能力非常的强。简单看一张图来展示一下它的能力。

    image

    然后它们的官网http://druid.io/在官网中给出了详细的各个信息可以进行参考,最新的版本等。

    本文重点不在Druid的性能分析或者是数据库连接的配置,而仅仅在于强调它数据监控的能力。

    如何配置

    在SpringBoot的项目中配置Druid十分的简单,其中有一些坑我已经踩过了,比如配置完成之后SQL监控没有数据的问题等等。按照以下的方式进行配置应该没有问题。

    1、引入依赖

    //数据库相关
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
    compile group: 'com.alibaba', name: 'druid', version: '1.0.19'

    2、application.yml配置

    # 数据方面的配置
      datasource:
            # 使用druid数据源
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            # 连接池的配置信息
            maxActive: 20
            initialSize: 5
            minIdle: 5
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            poolPreparedStatements: true
            maxOpenPreparedStatements: 20
    
            # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            filters: stat,wall,log4j
            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
            # 合并多个DruidDataSource的监控数据
            #spring.datasource.useGlobalDataSourceStat=true

    3、加入DruidConfig类

    在网上看过很多样子的配置方式,我觉得配置在同一个类里面比较方便,所以采用下面的方式

    package com.linkinstars.springBootTemplate.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;
    
    /**
     * @Description: Druid监控配置
     * @Author: LinkinStar
     */
    @Configuration
    public class DruidConfig {
    
        /**
         * 配置读取spring数据源
         */
        @Bean
        @ConfigurationProperties(prefix="spring.datasource")
        public DataSource druidDataSource() {
            return new DruidDataSource();
        }
    
        /**
         * 配置Druid监控启动页面
         */
        @Bean
        public ServletRegistrationBean druidStartViewServlet(){
            //org.springframework.boot.context.embedded.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.1.100");
    
            //登录查看信息的账号密码.
            servletRegistrationBean.addInitParameter("loginUsername","admin");
            servletRegistrationBean.addInitParameter("loginPassword","123456");
    
            //是否能够重置数据.
            servletRegistrationBean.addInitParameter("resetEnable","false");
            return servletRegistrationBean;
        }
    
        /**
         * Druid监控过滤器配置规则
         */
        @Bean
        public FilterRegistrationBean druidStartFilter(){
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    
            //添加过滤规则.
            filterRegistrationBean.addUrlPatterns("/*");
    
            //添加不需要忽略的格式信息.
            filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }

    到此为止,所有的配置已经完成,重新启动项目,使用项目根路径加上/druid/index.html即可访问

    http://127.0.0.1:8080/druid/index.html

    总结

    其实对于这次配置需要总结的地方不多,配置很简单,至于性能、数据上面,还要等实际检验之后的情况在做说明。

    最后推荐Druid上的Wiki https://github.com/alibaba/druid/wiki

    配置的所有代码可以参见我的github模版:https://github.com/LinkinStars/springBootTemplate

  • 相关阅读:
    浏览器F12(开发者调试工具) 功能介绍【转载】
    浏览器F12开发者工具的妙用【转载】
    linux中sed在指定字符前后添加内容
    查看TCP连接的命令【转载】
    Sql 语句删除重复项,保留id最小项
    MySQL中批量前缀表的sql语句
    【转载】登录的测试用例点
    Linux流量监控工具 – iftop
    postman接口添加断言
    测试点思考
  • 原文地址:https://www.cnblogs.com/linkstar/p/8308665.html
Copyright © 2011-2022 走看看