Spring Boot :Druid Monitor


忙里偷個閑,在這里分享一下SpringBoot集成Druid實現數據庫監控功能,有什么錯誤歡迎大家指出!

參考文件:
  Spring實現Druid監控:https://www.cnblogs.com/wanghuijie/p/druid_monitor.html
  DruidDataSource源碼分析:https://www.cnblogs.com/wanghuijie/p/druiddatasource.html
  保存Druid監控日志:https://www.cnblogs.com/wanghuijie/p/druid_stat_log.html

言歸正傳,看看是怎么實現的吧。

  一:引入Druid依賴

1 <dependency>
2     <groupId>com.alibaba</groupId>
3     <artifactId>druid</artifactId>
4     <version>1.0.31</version>
5 </dependency>
View Code

 

  二:在yml中添加druid配置

 1 spring:
 2           datasource:
 3             # 配置多數據源時使用
 4             main:
 5               name: AA
 6               driver-class-name: com.mysql.jdbc.Driver
 7               # 對應自己的數據庫連接
 8               url: jdbc:mysql://
 9               username: xxx
10               password: xxx
11               # Druid連接池的配置信息 Begin ##################################################
12               type: com.alibaba.druid.pool.DruidDataSource
13               #初始化連接大小
14               initialSize: 5
15               #最小連接池數量
16               minIdle: 5
17               #最大連接池數量
18               maxActive: 20
19               maxIdle: 20
20               # 配置獲取連接等待超時的時間
21               maxWait: 60000
22               # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
23               timeBetweenEvictionRunsMillis: 60000
24               # 配置一個連接在池中最小生存的時間,單位是毫秒
25               minEvictableIdleTimeMillis: 300000
26               # 測試連接
27               validationQuery: SELECT 1 FROM DUAL
28               # 申請連接的時候檢測,建議配置為true,不影響性能,並且保證安全性
29               testWhileIdle: true
30               # 獲取連接時執行檢測,建議關閉,影響性能
31               testOnBorrow: false
32               # 歸還連接時執行檢測,建議關閉,影響性能
33               testOnReturn: false
34               # 是否開啟PSCache,PSCache對支持游標的數據庫性能提升巨大,oracle建議開啟,mysql下建議關閉
35               poolPreparedStatements: false
36               # 開啟poolPreparedStatements后生效
37               maxPoolPreparedStatementPerConnectionSize: 20
38               # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆
39               filters: stat,wall,log4j
40               logSlowSql: true
41               # Druid連接池的配置信息 End ######################################################
View Code

 

  三: 使用java代碼讀取配置

  1 package com.bjgoodwill.oip.hosp.practice.druid;
  2 
  3 import com.alibaba.druid.pool.DruidDataSource;
  4 import com.alibaba.druid.support.http.StatViewServlet;
  5 import com.alibaba.druid.support.http.WebStatFilter;
  6 import org.apache.commons.lang3.StringUtils;
  7 import org.springframework.beans.factory.annotation.Value;
  8 import org.springframework.boot.web.servlet.FilterRegistrationBean;
  9 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 10 import org.springframework.context.annotation.Bean;
 11 import org.springframework.context.annotation.Configuration;
 12 import org.springframework.context.annotation.Primary;
 13 
 14 import javax.sql.DataSource;
 15 import java.sql.SQLException;
 16 
 17 @Configuration
 18 public class DruidSourceConfig {
 19 
 20     // 有多數據源時可調為多數據源的配置,如@Value("${spring.datasource.main.name}")
 21     @Value("${spring.datasource.name}")
 22     private String mainName;
 23 
 24     @Value("${spring.datasource.url}")
 25     private String mainUrl;
 26 
 27     @Value("${spring.datasource.username}")
 28     private String mainUsername;
 29 
 30     @Value("${spring.datasource.password}")
 31     private String mainPassword;
 32 
 33     @Value("${spring.datasource.driver-class-name}")
 34     private String mainDriverClassName;
 35 
 36     @Value("${spring.datasource.initialSize}")
 37     private String mainInitialSize;
 38 
 39     @Value("${spring.datasource.minIdle}")
 40     private String mainMinIdle;
 41 
 42     @Value("${spring.datasource.maxActive}")
 43     private String mainMaxActive;
 44 
 45     @Value("${spring.datasource.maxWait}")
 46     private String mainMaxWait;
 47 
 48     @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
 49     private String mainTimeBetweenEvictionRunsMillis;
 50 
 51     @Value("${spring.datasource.minEvictableIdleTimeMillis}")
 52     private String mainMinEvictableIdleTimeMillis;
 53 
 54     @Value("${spring.datasource.validationQuery}")
 55     private String mainValidationQuery;
 56 
 57     @Value("${spring.datasource.filters}")
 58     private String mainFilters;
 59 
 60     @Value("{spring.datasource.logSlowSql}")
 61     private String mainLogSlowSql;
 62 
 63     @Value("${spring.datasource.type}")
 64     private String mainType;
 65 
 66     @Value("{spring.datasource.maxIdle}")
 67     private String mainMaxIdle;
 68 
 69     @Bean
 70     @Primary
 71     public DataSource mainDataSource() {
 72         DruidDataSource datasource = new DruidDataSource();
 73 
 74         datasource.setUrl(mainUrl);
 75         datasource.setUsername(mainUsername);
 76         datasource.setPassword(mainPassword);
 77         datasource.setDriverClassName(mainDriverClassName);
 78 
 79         //configuration
 80         if (StringUtils.isNotBlank(mainInitialSize)) {
 81             datasource.setInitialSize(Integer.parseInt(mainInitialSize));
 82         }
 83         if (StringUtils.isNotBlank(mainMinIdle)) {
 84             datasource.setMinIdle(Integer.parseInt(mainMinIdle));
 85         }
 86         if (StringUtils.isNotBlank(mainMaxActive)) {
 87             datasource.setMaxActive(Integer.parseInt(mainMaxActive));
 88         }
 89         if (StringUtils.isNotBlank(mainMaxWait)) {
 90             datasource.setMaxWait(Integer.parseInt(mainMaxWait));
 91         }
 92         if (StringUtils.isNotBlank(mainTimeBetweenEvictionRunsMillis)) {
 93             datasource.setTimeBetweenEvictionRunsMillis(Integer.parseInt(mainTimeBetweenEvictionRunsMillis));
 94         }
 95         if (StringUtils.isNotBlank(mainMinEvictableIdleTimeMillis)) {
 96             datasource.setMinEvictableIdleTimeMillis(Integer.parseInt(mainMinEvictableIdleTimeMillis));
 97         }
 98 
 99         datasource.setValidationQuery(mainValidationQuery);
100         datasource.setTestWhileIdle(true);
101         datasource.setTestOnBorrow(false);
102         datasource.setTestOnReturn(false);
103         try {
104             datasource.setFilters(mainFilters);
105         } catch (SQLException e) {
106             e.printStackTrace();
107         }
108         return datasource;
109     }
110 
111     @Bean
112         public ServletRegistrationBean statViewServlet(){
113             ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
114             //設置ip白名單
115             servletRegistrationBean.addInitParameter("allow","");
116             //設置ip黑名單,優先級高於白名單
117             servletRegistrationBean.addInitParameter("deny","");
118             //設置控制台管理用戶
119             servletRegistrationBean.addInitParameter("loginUsername","root");
120             servletRegistrationBean.addInitParameter("loginPassword","root");
121             //是否可以重置數據
122             servletRegistrationBean.addInitParameter("resetEnable","false");
123             return servletRegistrationBean;
124         }
125 
126         @Bean
127         public FilterRegistrationBean statFilter(){
128             //創建過濾器
129             FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
130             //設置過濾器過濾路徑
131             filterRegistrationBean.addUrlPatterns("/*");
132             //忽略過濾的形式
133             filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
134             return filterRegistrationBean;
135         }
View Code

 

  四: 執行效果

  

  

 


免責聲明!

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



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