zoukankan      html  css  js  c++  java
  • Druid数据库连接池监控的使用

    Druid数据库连接池

    1. Druid是什么?

           Druid是Java语言中最好的数据库连接池,由阿里巴巴团队开发。Druid能够提供强大的监控和扩展功能。
            github地址为https://github.com/alibaba/druid,有丰富的中文文档和常见问题的解答,非常方便。

    2. 如何在springboot项目中使用?

    2.1 首先引入依赖

    	
    	<dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
    

    2.2 进行属性配置,仅供参考

    spring:
      #数据库连接配置
      datasource:
        url: jdbc:postgresql://127.0.0.1:5432/postgres
        data-username: postgres
        data-password: 123456
        driver-class-name: org.postgresql.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          #JDBC配置
          url: jdbc:postgresql://127.0.0.1:5432/postgres
          username: postgres
          password: 123456
          driver-class-name: org.postgresql.Driver
          #连接池配置
          initial-size: 10
          max-active: 50
          min-idle: 10
          max-wait: 5000
          pool-prepared-statements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
          max-pool-prepared-statement-per-connection-size: 20
          validation-query: SELECT 1 FROM DUAL
          validation-query-timeout: 20000
          test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
          test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
          test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
          time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          min-evictable-idle-time-millis: 300000  #一个连接在池中最小生存的时间,单位是毫秒
          # StatViewServlet配置。(因为暴露的监控信息比较敏感,支持密码加密和访问ip限定)
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            login-username: admin
            login-password: admin
          filter:
            stat:
              log-slow-sql: true
              slow-sql-millis: 1000
              merge-sql: true
            wall:
              config:
                multi-statement-allow: true
    

           各配置项的含义可以参考github的介绍,非常详细。值得注意的是stat-view-servlet属性配置的就是druid内置的监控页面,我们访问http://ip:port/druid,输入上面配置的用户名密码,即可看到下面的监控页面:

    在这里插入图片描述可以查看sql执行时间,修改行数等等。如果只想关注慢sql,可以修改上面配置文件中的 slow-sql-millis,druid默认的是3000ms。

    3. 结合spring的监控

           上面我们可以看到对sql执行的耗时等,但如果我们也想对方法进行监控可以么?答案肯定是可以的,在上面的监控页面我们可以看到有个叫spring监控,但因为没有配置,暂时为空。要开启监控配置也是非常简单的,如下:

    @Configuration
    @EnableAspectJAutoProxy(proxyTargetClass = true)
    public class DruidAspectConfig {
        @Bean
        public DruidStatInterceptor druidStatInterceptor() {
            DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
            return dsInterceptor;
        }
        @Bean
        @Scope("prototype")
        public JdkRegexpMethodPointcut druidStatPointcut() {
            JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
            pointcut.setPatterns("com.qa.cloud.mapper.*","com.qa.cloud.service.*");
            return pointcut;
        }
        @Bean
        public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
            DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
            defaultPointAdvisor.setPointcut(druidStatPointcut);
            defaultPointAdvisor.setAdvice(druidStatInterceptor);
            return defaultPointAdvisor;
        }
    }
    

    我们通过指定Patterns来确定要监控的方法,也可以通过接口类型,bean名称等进行配置。开启后效果如下:
    在这里插入图片描述
    据官方介绍,开启监控对性能的影响是微乎其微的。
           这些监控数据我们也可以调用api通过自定义的形式来输出,也可以输出到日志中(这点很有必要),具体做法都可以参考github上的介绍。
    参考博客:
    http://www.cnblogs.com/han-1034683568/p/6730869.html

  • 相关阅读:
    使用阿里云ECS安装HDFS的小问题
    退役回忆录嘤嘤嘤
    2018 ICPC北京 H ac自动机
    Educational Codeforces Round 54 (Rated for Div. 2) DE
    sa learning
    网络流learning
    Python模块logging
    Python模块unittest
    Linux /dev/shm
    Shell 字符串操作
  • 原文地址:https://www.cnblogs.com/seasail/p/12179386.html
Copyright © 2011-2022 走看看