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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM