首頁 > 軟體

SpringBoot整合阿里 Druid 資料來源的範例詳解

2022-11-13 14:01:07

前言:今年是我的第二個 1024 了 ,和我一起大聲說出來,技術宅改變世界!!!

本節主要介紹的是:SpringBoot 整合阿里 Druid 資料來源手動設定方法

1. 在容器中註冊 DruidDataSource 資料來源。

編寫資料來源設定類 MyDataSourseConfig.class,並在容器中註冊 DruidDataSource 資料來源。

程式碼範例如下:

@Configuration
public class MyDataSourseConfig {
    @Bean
    @ConfigurationProperties("spring.datasource") // 屬性與組態檔繫結
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

2. Druid 資料來源各種屬性設定方法

方法一(不推薦): 直接在設定類中通過為自定義的 DruidDataSource 元件 通過 set 設定各種屬性,來實現資料來源的設定。

程式碼範例如下:

@Configuration
public class MyDataSourseConfig {
    @Bean
    public DataSource dataSource(){
        
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/practice"); // 設定資料來源連線 url
        // ..... 設定其他屬性 .....
        return druidDataSource;
    }
}

這種方法當修養屬性值時,需要大量修改原始碼,因此不推薦。

方法二(推薦):通過 @ConfigurationProperties(“spring.datasource”) 註釋將元件與組態檔中的 spring.datasource 項繫結,這樣在修改自定義資料來源屬性時,直接在 application.yaml 檔案的 spring.datasource 設定項下修改即可。程式碼範例如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/practice
    username: root
    password: 5201314love
    driver-class-name: com.mysql.jdbc.Driver

可通過自定義資料來源元件註冊到容器中修改預設資料來源原理:

DataSourceAutoConfiguration.class 資料來源自動設定類中,有如下設定。其表示容器中沒有資料來源,才自動設定 Hikari 資料來源。若有資料來源則使用容器中的資料來源。

3. 開啟Druid的內建監控頁面

在容器中放一 Servlet ,具體操作方法為在 Druid資料來源 設定類中註冊一ServletRegistrationBean 元件到容器,ServletRegistrationBean 的Servlet 型別為 StatViewServlet 。程式碼範例如下:

注意點:存取的 url 為 "/druid/*" ,是一個 * 而不是雙 **

@Configuration
public class MyDataSourseConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }

    // 設定 druid 監控頁功能 —— 在容器中放一 Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*");
        return registrationBean;
    }
}

4. 開啟 Druid 監控統計功能

只是開啟了監控頁功能並不能讓我們使用 Druid 為我們提供的 SQL 監控等功能。還需要為資料來源設定 StatFilter,具體方法是通過 setFilters(“stat”) 方法設定。程式碼如下:

    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        // 加入監控功能 —— setFilters("stat");
        druidDataSource.setFilters("stat");
        return druidDataSource;
    }

這時我們再去存取資料庫,可以發現SQL監控功能可用了

5. 設定Web和Spring關聯監控

在容器中註冊一 WebStatFilter ,通過 setUrlPatterns(Arrays.asList(“/*”) 設定監控的請求為 /** 請求。具體程式碼實現如下:

    // 採集 web-jdbc 關聯監控的資料
    @Bean
    public FilterRegistrationBean webstatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();

        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter);
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return registrationBean;
    }

6. 設定防火牆:

在資料來源中通過 setFilter(“wall”) 加入 防火牆設定 (setFilter 多個值用逗號隔開)

        // 加入監控功能
        druidDataSource.setFilters("stat, wall");

小優化:
所有通過 setXXXX() 設定資料來源的,都可以在組態檔中寫,因為 druidDataSource 已經繫結了 spring.datasource 設定項

例如:

druidDataSource.setFilters("stat, wall");

可優化為:

spring:
  datasource:
    # ... 此處省略一堆其他設定....
    filters: stat,wall

7. 給監控頁加入賬號密碼

在 ServletRegistrationBean 中通過 addInitParameter 加入賬號密碼的設定

    // 設定 druid 監控頁功能 —— 在容器中放一 Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*");
        registrationBean.addInitParameter("loginUsername", "wanqing");
        registrationBean.addInitParameter("loginPassword", "520131");
        return registrationBean;
    }

到此這篇關於SpringBoot整合阿里 Druid 資料來源的文章就介紹到這了,更多相關SpringBoot整合Druid 資料來源內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com