使用Druid作為SpringBoot專案資料來源(新增監控)
阿新 • • 發佈:2018-11-18
Druid是一個關係型資料庫連線池,Druid支援所有JDBC相容資料庫,包括了Oracle、MySQL、PostgreSQL、SQL Server、H2等。
Druid在監控、可擴充套件性、穩定性和效能方面具有明顯的優勢。通過Druid提供的監控功能,可以實時觀察資料庫連線池和SQL查詢的工作情況。使用Druid連線池在一定程度上可以提高資料訪問效率。
新增Druid依賴
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency>
Druid配置
修改application.yml配置檔案,新增druid的支援
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/tets?characterEncoding=utf8 driverClassName: com.mysql.jdbc.Driver username: admin password: admin ###以下為druid增加的配置### type: com.alibaba.druid.pool.DruidDataSource # 下面為連線池的補充設定,應用到上面所有資料來源中 # 初始化大小,最小,最大 initialSize: 5 minIdle: 5 maxActive: 20 # 配置獲取連線等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個連線在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 開啟PSCache,並且指定每個連線上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆,此處是filter修改的地方 filters: commons-log.connection-logger-name: stat,wall,log4j # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合併多個DruidDataSource的監控資料 useGlobalDataSourceStat: true jpa: database: MySQL show-sql: true hibernate: naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy #表名,欄位為小寫,當有大寫字母的時候會轉換為分隔符號“_”。
filters:stat表示已經可以使用監控過濾器,這時結合定義一個過濾器,就可以用來監控資料庫的使用情況。
開啟Druid監控功能
開啟監控功能,可以在應用執行的過程中,通過監控提供的多維度資料來分析使用資料庫的執行情況,從而可以調整程式設計,以便於優化資料庫的訪問效能。
下面我們來實現Druid的訪問Servlet以及Filterr提供監控頁面訪問,
@Configuration 註解下所有bean 和配置將應用到全域性
package com.cxy; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; 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; @Configuration public class DruidConfiguration { @Bean public ServletRegistrationBean statViewServlet(){ //建立servlet註冊實體 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //設定ip白名單 servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //設定ip黑名單,如果allow與deny共同存在時,deny優先於allow servletRegistrationBean.addInitParameter("deny","192.168.0.19"); //設定控制檯管理使用者 servletRegistrationBean.addInitParameter("loginUsername","druid"); servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否可以重置資料 servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } @Bean public FilterRegistrationBean statFilter(){ //建立過濾器 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //設定過濾器過濾路徑 filterRegistrationBean.addUrlPatterns("/*"); //忽略過濾的形式 filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
監控介面,訪問地址:127.0.0.1:8080/druid/login.html
模組介紹
資料來源
可以看到專案中管理的所有資料來源配置的詳細情況,除了密碼沒有顯示外其他都在。
SQL監控
可以檢視所有的執行sql語句
SQL防火牆
druid提供了黑白名單的訪問,可以清楚的看到sql防護情況。
Web應用
可以看到目前執行的web程式的詳細資訊。
URI監控
可以監控到所有的請求路徑的請求次數、請求時間等其他引數。
Session監控
可以看到當前的session狀況,建立時間、最後活躍時間、請求次數、請求時間等詳細引數。
JSONAPI
通過api的形式訪問Druid的監控介面,api介面返回Json形式資料。