1. 程式人生 > >spring boot 配置 Druid

spring boot 配置 Druid

       Druid是阿里託管於GitHub的開源的資料庫連結池工具,他封裝提供並聚合了各種統計,通過簡單的配置就可以實現sql防火牆和防注入功能,是當下最強大,功能最全的資料庫連線池工具。

      因專案需要,配置了連線池,現專案上線,特此記錄下,方便以後使用。

      相關環境版本:jdk版本1.8,springboot版本1.5.10,druid版本

首先引入maven配置

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

接下類是Druid的配置檔案,配置檔案的寫法有兩種,bean載入和基於註解,我所使用的是bean的方式


import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

/**
 * ClassName: DruidConfiguration 
 * Description: 
 * @date 2018年7月20日  
 */
@Configuration
public class DruidConfiguration {
 
    private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
 
 
    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // IP白名單
        servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
        // IP黑名單(共同存在時,deny優先於allow)
        servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
        //控制檯管理使用者
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        //是否能夠重置資料 禁用HTML頁面上的“Reset All”功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }
 
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
 
        @Bean     //宣告其為Bean例項
        @Primary  //在同樣的DataSource中,首先使用被標註的DataSource
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource datasource(){
             return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
        }
}

三個bean依次為:Druid監控頁面的配置(包含黑白名單),過濾器的配置,和連線池的yml檔案配置讀取,載入

下面是yml檔案的配置:

spring:
  datasource:
    url: jdbc:mysql://10.200.200.6:3306/scauth?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8&noAccessToProcedureBodies=true&zeroDateTimeBehavior=convertToNull
    password: 
    username: 
    driver-class-name: com.mysql.jdbc.Driver
    platform: mysql
    # 下面為連線池的補充設定,應用到上面所有資料來源中
    type: com.alibaba.druid.pool.DruidDataSource
    # 初始化大小,最小,最大
    initialSize: 1
    minIdle: 3
    maxActive: 20
    # 配置獲取連線等待超時的時間
    maxWait: 60000
    # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一個連線在池中最小生存的時間,單位是毫秒
    minEvictableIdleTimeMillis: 30000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 開啟PSCache,並且指定每個連線上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆
    filters: stat,wall,slf4j
    # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合併多個DruidDataSource的監控資料
    #useGlobalDataSourceStat: true

Druid支援多資料來源配置,不過上面的配置方式只是單資料來源的,

就能看到登入頁

輸入賬戶/密碼:admin/admin  登入成功,跳轉首頁。在此提示,登入賬戶密碼可以不設定,不設定的話訪問連結直接跳轉首頁

首頁展示的是專案的概要包括驅動,路徑,jdk版本,引用的jar等。除此之外還有各種統計。特別要記住的是,Druid的統計不會持久儲存,專案每次重啟會清零所以如果有需要儲存的資料 最好自己儲存一份