Druid 是一個非常好用的數據庫連接池,但是他的好並不止體現在作為一個連接池加快數據訪問性能上和連接管理上,他帶有一個強大的監控工具:Druid Monitor。不僅可以監控數據源和慢查詢,還可以監控 Web 應用、URI 監控、Session 監控、Spring 監控。
1、引入依賴
在 Spring Boot 項目中加入 druid-spring-boot-starter
依賴
Maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
Gradle:
compile 'com.alibaba:druid-spring-boot-starter:1.1.16'
2、配置 application.yml
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
屬性說明:
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 用於防火牆
3、配置 DruidMonitorConfig 類
DruidMonitorConfig 類:
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 的監控界面。