springboot 學習(五) springboot使用druid


Druid簡介

Java程序很大一部分要操作數據庫,為了提高性能操作數據庫的時候,又不得不使用數據庫連接池。

Druid 是阿里巴巴開源平台上一個數據庫連接池實現,結合了 C3P0、DBCP 等 DB 池的優點,同時加入了日志監控。

Druid 可以很好的監控 DB 池連接和 SQL 的執行情況,天生就是針對監控而生的 DB 連接池。

Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。

Spring Boot 2.0 以上默認使用 Hikari 數據源,可以說 Hikari 與 Driud 都是當前 Java Web 上最優秀的數據源,我們來重點介紹 Spring Boot 如何集成 Druid 數據源,如何實現數據庫監控。

Github地址:https://github.com/alibaba/druid/

以下是druid參數說明

 

 

 

maven配置druid,log4j依賴,druid是有日志監控的

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

配置文件中切換數據源,同時配置druid屬性,springboot默認的是hikari

spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource


#Spring Boot 默認是不注入這些屬性值的,需要自己綁定
#druid 數據源專有配置

#配置監控統計攔截的filters,stat:監控統計、log4j:日志記錄、wall:防御sql注入
filters: wall,stat,log4j

#2.連接池配置
#初始化連接池的連接數量 大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
#配置獲取連接等待超時的時間
max-wait: 60000
#配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
min-evictable-idle-time-millis: 30000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: false
# 是否緩存preparedStatement,也就是PSCache 官方建議MySQL下建議關閉 個人建議如果想用SQL防火牆 建議打開
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20

由於DruidDataSource需要使用上述的配置,在添加到容器中,就不能使用springboot自動生成,這時需要我們自己添加 DruidDataSource 組件到容器中,並綁定屬性;代碼如下

@Configuration public class DruidConfig { /* 將自定義的 Druid數據源添加到容器中,不再讓 Spring Boot 自動創建 綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效 @ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中 前綴為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中 */ @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druidDataSource() { return new DruidDataSource(); }

以上就是使用druid數據源的切換過程

接下來講下druid日志監控

Druid 數據源具有監控的功能,並提供了一個 web 界面方便用戶查看,類似安裝 路由器 時,人家也提供了一個默認的 web 頁面。

所以第一步需要設置 Druid 的后台管理頁面,比如 登錄賬號、密碼 等;配置后台管理;

這里只是注冊了一個servlet,同時表明/druid/* 這個請求會走到這個servlet,而druid內置了這個請求的接收,同時需要給這個請求添加用戶密碼等參數

    //配置 Druid 監控管理后台的Servlet; //內置 Servlet 容器時沒有web.xml文件,所以使用 Spring Boot 的注冊 Servlet 方式
 @Bean public ServletRegistrationBean a(){ ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); Map<String, String> initParameters = new HashMap<>(); initParameters.put("loginUsername","admin"); initParameters.put("loginPassword","12346"); bean.setInitParameters(initParameters); return bean; }

配置完畢后,我們可以選擇訪問 :http://localhost:8080/druid/login.html

 

 

 

 配置過濾請求,需要統計哪些sql的信息

//配置 Druid 監控 之 web 監控的 filter //WebStatFilter:用於配置Web和Druid數據源之間的管理關聯監控統計
@Bean public FilterRegistrationBean webStatFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); //exclusions:設置哪些請求進行過濾排除掉,從而不進行統計
    Map<String, String> initParams = new HashMap<>(); initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*"); bean.setInitParameters(initParams); //"/*" 表示過濾所有請求
    bean.setUrlPatterns(Arrays.asList("/*")); return bean; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM