美文网首页springbootDruid
SpringBoot引入Druid数据源监控

SpringBoot引入Druid数据源监控

作者: 上进的小二狗 | 来源:发表于2018-08-02 16:57 被阅读0次

    一、引言

    Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
    Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。
    因为阿里巴巴开源了druid连接池源码,我们可以通过maven仓库可以获得jar包依赖。
    访问mvnrepository.com/artifact/com.alibaba/druid选择1.0.29,点击进入后复制maven内容到pom.xml内即可

    二、实现

    1、引入依赖
    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.29</version>
            </dependency>
    
    2、包结构展示如下
    3、配置 Druid 数据源
    server:
      port: 9090
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3308/user_test?useUnicode=true&useSSL=false&amp;characterEncoding=UTF-8
    
        #配置监控统计拦截的 filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat, wall
        #最大活跃数
        maxActive: 20
        #初始化数量
        initialSize: 1
        #最大连接等待超时时间
        maxWait: 60000
        #打开PSCache,并且指定每个连接PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
        #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 1 from dual
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
    
    jpa:
      database: MySQL
      show-sql: true
      format_sql: true
      hibernate:
       naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
    
    4、Configuration 包中编写 druid 监控类
    package com.ly.springbootjpa.configuration;
    
    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;
    
    /**
     * druid 监控
     */
    @Configuration
    public class DruidConfiguration {
    
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druid(){
            return new DruidDataSource();
        }
    
        /**
         * druid 数据源状态监控
         * @return
         */
        @Bean
        public ServletRegistrationBean statViewServlet(){
            //创建servlet注册实体
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
            //设置ip白名单
            servletRegistrationBean.addInitParameter("allow","127.0.0.1");
            //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
            servletRegistrationBean.addInitParameter("deny","192.168.0.19");
            //设置控制台管理用户
            servletRegistrationBean.addInitParameter("loginUsername","druid");
            servletRegistrationBean.addInitParameter("loginPassword","123456");
            //是否可以重置数据
            servletRegistrationBean.addInitParameter("resetEnable","false");
            return servletRegistrationBean;
        }
    
        /**
         * druid 过滤器
         * @return
         */
        @Bean
        public FilterRegistrationBean statFilter(){
            //创建过滤器
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            //设置过滤器过滤路径
            filterRegistrationBean.addUrlPatterns("/*");
            //忽略过滤的形式
            filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }
    
    5、登录监控中心 (用户名:druid 密码:123456)
    6、在监控中心中查看各种信息

    当执行不同的 方法操作后会对于不同的监控信息记录
    监控中心说明如下:

    名称 作用
    数据源 可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在
    SQL监控 可以查看所有的执行sql语句
    SQL防火墙 druid提供了黑白名单的访问,可以清楚的看到sql防护情况
    Web应用 可以看到目前运行的web程序的详细信息
    URI监控 可以监控到所有的请求路径的请求次数、请求时间等其他参数
    Session监控 可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数
    JSONAPI 通过api的形式访问Druid的监控接口,api接口返回Json形式数据

    参考链接:https://www.jianshu.com/p/28b4889b5f20

    相关文章

      网友评论

        本文标题:SpringBoot引入Druid数据源监控

        本文链接:https://www.haomeiwen.com/subject/rzgjvftx.html