1. 程式人生 > >spring boot 整合 druid(深入淺出)

spring boot 整合 druid(深入淺出)

spring boot 整合 druid

想必搜這篇文章的朋友差不多都知道druid的屬性和知識了吧,獲取之前使用的別的方式進行整合的。不過也簡單的講一下阿里巴巴提供的這個druid的簡介,讓我們一塊學習一下

一、簡介

Druid首先是一個數據庫連線池。 Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。Druid是阿里巴巴開發的號稱為監控而生的資料庫連線池!

儲存到Druid的資料由三部分組成:

♦ Timestamp列:資料的時間戳列,所有的查詢都是以時間為中心。

♦ Dimension列:資料的維度列,用於過濾資料。

♦ Metric列:資料的聚合列,用於聚合資料,支援包括sum,count,min和max等計算。

Springboot整合druid其實非常簡單,在maven repository中可以找到相應的jar包

Druid的功能

1、替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。

2、可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。

3、資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。

4、SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。

5、擴充套件JDBC,如果你要對JDBC層有程式設計的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴充套件外掛。

二、配置

2.1工程架構圖(其他的包不用管,是我之前的)


2.2 萬變不離其總,pom檔案,SpringBoot個druid的結合包

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>druid-spring-boot-starter</artifactId>
		    <version>1.1.9</version>
		</dependency>

2.2新建一個類DruidDataSourceConfiguration(這個可以直接進行拷貝,也建議看一看裡面的內容)

/**
 * 
 */
package com.yuyi.mcb.druid;

import javax.sql.DataSource;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DatabaseDriver;
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 com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

/**
 * @author mcb
 * 2018年5月4日 上午10:16:19
 *         
 */
@Configuration
@ConditionalOnClass(com.alibaba.druid.pool.DruidDataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)
public class DruidDataSourceConfiguration {
	@SuppressWarnings("unchecked")
    protected <T> T createDataSource(DataSourceProperties properties,
                                     Class<? extends DataSource> type) {
        return (T) properties.initializeDataSourceBuilder().type(type).build();
    }
	 /**
     * @see org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Tomcat 
     * @param properties 讀入的配置
     * @return DruidDataSource
     */
	@Bean
    @ConfigurationProperties("spring.datasource.druid")
    public com.alibaba.druid.pool.DruidDataSource dataSource(DataSourceProperties properties) {
        com.alibaba.druid.pool.DruidDataSource dataSource = createDataSource(
                properties, com.alibaba.druid.pool.DruidDataSource.class);

        DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(properties.determineUrl());
        String validationQuery = databaseDriver.getValidationQuery();
        if (validationQuery != null) {
            dataSource.setTestOnBorrow(true);
            dataSource.setValidationQuery(validationQuery);
        }
        return dataSource;
    }
	 /**
     * 註冊一個StatViewServlet
     */
    @Bean
    public ServletRegistrationBean druidStatViewServlet(){
        //org.springframework.boot.context.embedded.ServletRegistrationBean提供類的進行註冊.
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        //新增初始化引數:initParams
        //白名單:
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny","192.168.1.73");
        //登入檢視資訊的賬號密碼.
        servletRegistrationBean.addInitParameter("loginUsername","root");
        servletRegistrationBean.addInitParameter("loginPassword","password");
        //是否能夠重置資料.
        servletRegistrationBean.addInitParameter("resetEnable","false");// 禁用HTML頁面上的“Reset All”功能
        return servletRegistrationBean;
    }
	
    /**
     * 註冊一個:filterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean druidStatFilter(){

        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.setName("druidWebStatFilter");
        //新增過濾規則.
        filterRegistrationBean.addUrlPatterns("/*");
        //新增忽略的格式資訊.
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
	
	
	
	
	
	
}

2.3在application.properties中新增配置(資料庫自己搭建)

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 下面為連線池的補充設定,應用到上面所有資料來源中
# 初始化大小,最小,最大
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
# 配置獲取連線等待超時的時間
spring.datasource.druid.maxWait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
# 配置一個連線在池中最小生存的時間,單位是毫秒
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM t_user
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=true
spring.datasource.druid.testOnReturn=false
# 開啟PSCache,並且指定每個連線上PSCache的大小
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆
spring.datasource.druid.filters=stat,wall,log4j
# 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合併多個DruidDataSource的監控資料
#spring.datasource.druid.useGlobalDataSourceStat=true

恭喜你搭建完成。。

三、訪問

請求瀏覽器地址:http://localhost:8082/druid/index.html

自動跳到未登入介面,賬號和密碼是自己在工程中的配置



訪問結果介面:


簡直棒棒的!!!!!

不懂在下面留言即可

歡迎訂閱關注公眾號(JAVA和人工智慧)

                                       

                                                           獲取更多免費書籍、資源、視訊資料