Druid 是一個很是好用的數據庫鏈接池,可是他的好並不止體如今做爲一個鏈接池加快數據訪問性能上和鏈接管理上,他帶有一個強大的監控工具:Druid Monitor。不只能夠監控數據源和慢查詢,還能夠監控 Web 應用、URI 監控、Session 監控、Spring 監控。css
在 Spring Boot 項目中加入 druid-spring-boot-starter
依賴
Maven:html
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.16</version> </dependency>
Gradle:java
compile 'com.alibaba:druid-spring-boot-starter:1.1.16'
spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull username: root password: test123$ # 下面爲鏈接池的補充設置,應用到上面全部數據源中 # 初始化大小,最小,最大 initialSize: 1 minIdle: 3 maxActive: 20 # 配置獲取鏈接等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個鏈接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 30000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false # 打開 PSCache,而且指定每一個鏈接上 PSCache 的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的 filters,去掉後監控界面 sql 沒法統計,'wall'用於防火牆 filters: stat,wall,slf4j # 經過 connectProperties 屬性來打開 mergeSql 功能;慢 SQL 記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合併多個 DruidDataSource 的監控數據 useGlobalDataSourceStat: true type: com.alibaba.druid.pool.DruidDataSource
屬性說明:mysql
spring.datasource.druid.max-active # 最大鏈接數
spring.datasource.druid.initial-size # 初始化大小
spring.datasource.druid.min-idle # 最小鏈接數
spring.datasource.druid.max-wait # 獲取鏈接等待超時時間
spring.datasource.druid.time-between-eviction-runs-millis # 間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis # 一個鏈接在池中最小生存的時間,單位是毫秒
spring.datasource.druid.filters=config,stat,wall,log4j # 配置監控統計攔截的 filters,去掉後監控界面 SQL 沒法進行統計,wall 用於防火牆web
DruidMonitorConfig 類:spring
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 com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration public class DruidMonitorConfig { @Primary @Bean @ConfigurationProperties("spring.datasource.druid") public DataSource druidDataSource() { return DruidDataSourceBuilder.create().build(); } /** * 註冊 ServletRegistrationBean * * @return */ @Bean public ServletRegistrationBean registrationBean() { ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); /** 初始化參數配置,initParams**/ // 白名單 bean.addInitParameter("allow", "127.0.0.1");// 多個 ip 逗號隔開 // IP 黑名單 (存在共同時,deny 優先於 allow) : 若是知足 deny 的話提示:Sorry, you are not permitted to view this page. // bean.addInitParameter("deny", "192.168.1.73"); // 登陸查看信息的帳號密碼. bean.addInitParameter("loginUsername", "admin"); bean.addInitParameter("loginPassword", "123456"); // 是否可以重置數據. bean.addInitParameter("resetEnable", "true"); return bean; } /** * 註冊 FilterRegistrationBean * * @return */ @Bean public FilterRegistrationBean druidStatFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(new WebStatFilter()); //添加過濾規則. bean.addUrlPatterns("/*"); //添加不須要忽略的格式信息. bean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return bean; } }
到此 Spring Boot 項目集成 Druid 監控完成了,啓動 Spring Boot 應用程序,打開瀏覽器,輸入:http://localhost:8080/druid/index.html, 登陸後便可看到 Druid 的監控界面。sql