springboot系列學習(十九):springboot專案整合Druid,Druid到底是什麼,他是在專案中如何使用的

- ich lebe .發表於2020-10-02

Druid總結就是一個資料庫的連線池,就是這個池子裡面有很多的資料庫的連結的物件,我們可以從這個池子裡面拿出一個物件進行運算元據庫,不用了放到這個池子裡面。Druid就是一個池子。

Druid 是阿里巴巴開源平臺上一個資料庫連線池實現,結合了 C3P0、DBCP 等 DB 池的優點,同時加入了日誌監控。

之前我們匯入jdbc的依賴之後,在yml配置檔案裡面加資料來源,之後就可以使用jdbc運算元據庫了。現在變了,我們從頭開始說這個Druid在springboot專案裡面如何使用

先看一下之前的整合的jdbc使用的資料來源是什麼

匯入jdbc之後,之前的yml裡面是這樣寫

在這裡插入圖片描述

之後我們就可以在測試類裡面,輸出這樣配置之後的資料來源是什麼,在測試類裡面的程式碼是

在這裡插入圖片描述
執行這個測試類之後,輸出的資料來源是

在這裡插入圖片描述
大家記住這個資料來源的型別,我們之後看看配置了Druid之後輸出的是什麼

建立一個springboot專案,匯入Druid依賴

在這裡插入圖片描述
在yml裡面的配置加一句Druid的配置

在這裡插入圖片描述
我們重新執行測試類,看看輸出的是什麼
在這裡插入圖片描述
看,資料來源已經變為了Druid了,之後運算元據庫就是這個資料來源了。

切換成功!既然切換成功,就可以設定資料來源連線初始化大小、最大連線數、等待時間、最小連線數 等設定項;可以檢視原始碼

既然已經切換成功,那麼我們就可以配置Druid自己的配置了,這個也是在yml裡面配置,具體可以配置哪些?一起看看吧

 #Spring Boot 預設是不注入這些屬性值的,需要自己繫結
    #druid 資料來源專有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
    #如果允許時報錯  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #則匯入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

這些配置裡面,最牛的地方是這些配置

   #配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
    #如果允許時報錯  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #則匯入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

因為有監控log4j,所以我們先匯入他的依賴

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

之後啟動專案,其實這個時候我們看不出來和之前的有什麼區別,因為資料來源是底層的,換一個底層,表面的工作還是增刪改查,我們察覺不到,現在我們要自己看到有什麼區別,所以想辦法看到區別,怎麼看?

1 寫一個Druid的配置類,並且讓這個配置類和yml裡面配置的Druid相關的東西繫結,這樣就可以在配置類裡面使用yml裡面的東西了。

yml檔案和配置類繫結,這個之前就寫過

在這裡插入圖片描述

@Configuration
public class DruidConfig {

    /*
       將自定義的 Druid資料來源新增到容器中,不再讓 Spring Boot 自動建立
       繫結全域性配置檔案中的 druid 資料來源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效
       @ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全域性配置檔案中
       字首為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名引數中
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

}

解釋以上的配置類的作用:

不管匯入什麼依賴,都會有一個配置類,這個是在原始碼裡面,但是現在我們不想要這個原始碼裡面的配置類了,我們想自定義,所以我們要自己寫,自己寫的格式還要和原始碼裡面的一樣。以前我們自己寫一個yml檔案,裡面配置一下,之後專案啟動的時候,yml裡面的值會自動的賦值到原始碼裡面的配置類裡面。現在我們自定義了配置類,所以要求專案一啟動,yml裡面的配置的值要自動的賦值到我們自定義的配置類上面,而不是原始碼裡面的配置類,所以現在的自定義的配置類就是以上的寫法,記住就可以,因為原始碼裡面的格式也是那樣的。

Druid 資料來源具有監控的功能,並提供了一個 web 介面方便使用者檢視,類似安裝 路由器 時,人家也提供了一個預設的 web 頁面。

我們咋看到這個頁面,咋使用這個監控功能,如下:
在配置類裡面寫如下的程式碼
在這裡插入圖片描述

  //配置 Druid 監控管理後臺的Servlet;
//內建 Servlet 容器時沒有web.xml檔案,所以使用 Spring Boot 的註冊 Servlet 方式
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        // 這些引數可以在 com.alibaba.druid.support.http.StatViewServlet
        // 的父類 com.alibaba.druid.support.http.ResourceServlet 中找到
        Map<String, String> initParams = new HashMap<>();
        initParams.put("loginUsername", "admin"); //後臺管理介面的登入賬號
        initParams.put("loginPassword", "123456"); //後臺管理介面的登入密碼

        //後臺允許誰可以訪問
        //initParams.put("allow", "localhost"):表示只有本機可以訪問
        //initParams.put("allow", ""):為空或者為null時,表示允許所有訪問
        initParams.put("allow", "");
        //deny:Druid 後臺拒絕誰訪問
        //initParams.put("jing", "192.168.1.20");表示禁止此ip訪問

        //設定初始化引數
        bean.setInitParameters(initParams);
        return bean;
    }

這個監控的頁面是人家已經寫好的,拿來就可以使用,你只需要在你的專案裡面配置以上的程式碼之後,這個配置類裡面的程式碼是死的,你不需要記住,拿來用就可以,之後執行專案,根據指定的路徑訪問這個頁面就可以了。

在這裡插入圖片描述
在這裡插入圖片描述
以後專案裡面執行了什麼sql語句,這個控制頁面上面就會記錄,我們登入後就會看到這個專案裡面執行過上面sql語句

Druid的過濾器

也就是我們配置了這個,這個裡面的東西就不會在監控裡面看見,也就是不監控這些東西了
在這裡插入圖片描述


//配置 Druid 監控 之  web 監控的 filter
//WebStatFilter:用於配置Web和Druid資料來源之間的管理關聯監控統計
@Bean
public FilterRegistrationBean webStatFilter() {
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new WebStatFilter());

    //exclusions:設定哪些請求進行過濾排除掉,從而不進行統計
    Map<String, String> initParams = new HashMap<>();
    initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
    bean.setInitParameters(initParams);

    //"/*" 表示過濾所有請求
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
}

相關文章