1. 程式人生 > >springboot配置Druid資料來源

springboot配置Druid資料來源

springboot配置druid資料來源

Author:SimpleWu

springboot整合篇

前言

對於資料訪問層,無論是Sql還是NoSql,SpringBoot預設採用整合SpringData的方式進行統一管理,新增大量的自動配置,遮蔽了很多設定。引入了各種XxxTemplate和XxxRepository來簡化我們隊資料訪問層的操作。

springboot2.0預設是用com.zaxxer.hikari.HikariDataSource作為資料來源。

2.0以下預設採用的是org.apache.tomcat.jdbc.pool.DataSource作為資料來源。

Hikari的官方網站:http://brettwooldridge.github.io/HikariCP/

Hikari號稱JAVA領域中最快的資料連線池,你可去點連線進去看看,第一行就是說他自己多麼厲害,秒殺什麼什麼的,不過再快我也覺得沒有阿里巴巴奉獻給apache的Druid好,因為阿里巴巴的服務周到,裡面有監控中心,可以幫助我們快速定位慢sql等。

Druid官方網站:http://druid.io/

為什麼HikariCP被號稱為效能最好的Java資料庫連線池,如何配置使用參考這篇部落格:點選

注意事項:預設情況下使用com.zaxxer.hikari.HikariDataSource獲取資料來源時會丟擲一個異常。說時區不對,需要我們修改mysql的時區:

SHOW VARIABLES LIKE '%time_zone%'
SET GLOBAL time_zone="+8:00"

使用Druid資料來源

Apache Druid(Incubating) - 面向列的分散式資料儲存,非常適合為互動式應用程式提供動力

雖然HikariDataSource效能非常高,但是阿里的druid資料來源配有成套的資料來源管理軟體,開發中使用的更多。

以往我們都是直接引入Druid的依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
</dependency>

但是面對這麼火爆的springboot並沒有直接對Druid的啟動器而是需要我們自己整合,apache中4個月前已經出了一套完美支援springboot的方案所以說我們不使用上面的依賴而是使用:

原始碼下載:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.10</version>
</dependency>

配置YML檔案,具體的引數配置可以去官網看看:

spring:
  datasource:
#   資料來源基本配置
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/duid
    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
    poolPreparedStatements: true
#   配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆  
    filters: stat,wall
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true  
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

雖然我們配置了druid連線池的其它屬性,但是不會生效。因為預設是使用的java.sql.Datasource的類來獲取屬性的,有些屬性datasource沒有。如果我們想讓配置生效,需要手動建立Druid的配置檔案。

@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DruidDataSource druidDataSource(){
      return new DruidDataSource();
}

Druid的最強大之處在於它有著強大的監控,可以監控我們傳送到資料庫的所有sql語句。方便我們後期排插錯誤。

我們接著在DruidDataSource裡面配置監控中心:

 /**
     * 配置監控伺服器
     * @return 返回監控註冊的servlet物件
     * @author SimpleWu
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // 新增IP白名單
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
        // 新增IP黑名單,當白名單和黑名單重複時,黑名單優先順序更高
        servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
        // 新增控制檯管理使用者
        servletRegistrationBean.addInitParameter("loginUsername", "SimpleWu");
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
        // 是否能夠重置資料
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    /**
     * 配置服務過濾器
     *
     * @return 返回過濾器配置物件
     */
    @Bean
    public FilterRegistrationBean statFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        // 新增過濾規則
        filterRegistrationBean.addUrlPatterns("/*");
        // 忽略過濾格式
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
        return filterRegistrationBean;
    }

配置完後我們啟動springboot程式訪問:

http://localhost:8080/druid/ 就可以來到我們的登入頁面面就是我們上面新增的控制檯管理使用者,我們可以在上面很好的看到執行狀況,圖片就不貼了截圖挺麻煩的。