### 簡單了解
1.思考,為啥用druid?
> Druid是一個高效的數據查詢系統,主要解決的是對于大量的基于時序的數據進行聚合查詢。數據可以實時攝入,進入到Druid后立即可查,同時數據是幾乎是不可變。通常是基于時序的事實事件,事實發生后進入Druid,外部系統就可以對該事實進行查詢。
Druid采用的架構:
shared-nothing架構與lambda架構
Druid設計三個原則:
1.快速查詢(Fast Query) : 部分數據聚合(Partial Aggregate) + 內存華(In-Memory) + 索引(Index)
2.水平拓展能力(Horizontal Scalability):分布式數據(Distributed data)+并行化查詢(Parallelizable Query)
3.實時分析(Realtime Analytics):Immutable Past , Append-Only Future
2.Druid的技術特點
* 數據吞吐量大
* 支持流式數據攝入和實時
* 查詢靈活且快速
**反正就是很厲害了,**
### 引入依賴
~~~
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
~~~
數據庫配置
~~~
## 數據庫訪問配置
spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driverClassName=com.mysql.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://118.24.93.185:3306/blog?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.druid.username=blog
spring.datasource.druid.password=123456
# 下面為連接池的補充設置,應用到上面所有數據源中
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置獲取連接等待超時的時間
spring.datasource.druid.max-wait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打開PSCache,并且指定每個連接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻
spring.datasource.druid.filter.commons-log.connection-logger-name=stat,wall,log4j
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.druid.connect-properties.=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監控數據
spring.datasource.druid.use-global-data-source-stat=true
~~~
### 新建ruidConfig文件
~~~
package com.blog.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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 javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @author cfun
* @description
* @date 2019-11-19
*/
@Configuration
public class DruidConfig {
// 將所有前綴為spring.datasource下的配置項都加載到DataSource中
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
@Bean
public ServletRegistrationBean druidStatViewServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String, String> initParams = new HashMap<>();
// 可配的屬性都在 StatViewServlet 和其父類下
initParams.put("loginUsername", "cfun");
initParams.put("loginPassword", "123456");
servletRegistrationBean.setInitParameters(initParams);
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean druidWebStatFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
Map<String, String> initParams = new HashMap<>();
initParams.put("exclusions", "*.js,*.css,/druid/*");
filterRegistrationBean.setInitParameters(initParams);
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
return filterRegistrationBean;
}
}
~~~
訪問地址
[http://localhost:8082/druid/index.html](http://localhost:8082/druid/index.html)
