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和人工智慧)
獲取更多免費書籍、資源、視訊資料