1. 程式人生 > >使用Druid作為SpringBoot專案資料來源(新增監控)

使用Druid作為SpringBoot專案資料來源(新增監控)

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形式資料。