spring boot系列(五)集成Druid數據源

數據庫連接池

連接池的思想就是建立一個"緩存池",預先存放一定數量的連接,當需要建立數據庫連接時,就從"緩存池"中取出一個,用完之後再放入池中。

連接池是怎麼管理、分配連接對象呢?

使用一個"空閒池"管理已經被創建但未被使用的連接,當有一個新的連接請求時,首先再"空閒池"中尋找空閒的連接對象,如果池中有空閒連接對象,就把空閒時間最長的那個連接對象取出來分配(前提是這個對象是有效的),如果這個對象不可用,就將其從"空閒池"中刪除,重新檢測。如果沒有檢測到可用連接,則判斷當前連接數是否達到最大連接數,如果沒有,則創建新的連接,如果達到最大連接數,則進入等待。如果在等待的時間內,檢測到可用的連接,則進行分配,如果超時還未檢測到可用連接,則返回null。系統只對所創建的連接進行計數統計,對於檢測可用連接,可開闢線程(提示響應速度,增加系統開銷)、也可在分配前進行檢測。


Druid

Durid是阿里開源的JDBC應用組件,包括三部分:

  • DruidDriver:代理Driver,能提供基於Filter-Chian模式的插件系統
  • DruidDataoSource:高效可管理的數據庫連接池
  • SQLParser:SQL語法分析

通過Druid連接池中間件,可以實現:

  • 可監控的數據庫訪問的性能,Druid提供了一個強大的StatFilter插件,能詳細的統計SQL執行性能,對於線上分析數據庫訪問性能非常有利
  • 替換傳統的DBCPC3P0中間件。提供一個高效、功能強大、可監控的數據庫連接池
  • 數據庫密碼加密。直接把數據庫密碼寫入配置文件中,會存在極大的安全問題,DruidDriver和DruidDataSource都支持PasswordCallBack。
  • SQL執行日誌。Druid提供了不同的LogFilter,能夠支持Common-LoggingLog4jjdkLog,可按需選擇日誌框架
  • 擴展JDBC。如果對JDBC層有編程需求、可通過Druid提供的Filter-Chain機制,方便編寫JDBC擴展插件

Druid文檔

Druid官方文檔


案例

pom.xml中添加依賴

        <!--Druid依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>


修改數據源配置

   datasource:
     name: druidDataSource
     type: com.alibaba.druid.pool.DruidDataSource
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
       url: jdbc:mysql://192.168.1.8:3306/studenms?useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&autoReconnect=true&characterEncoding=utf-8&serverTimezone=UTC
       username: root
       password: sa
       filters: stat,wall,log4j,config
       max-active: 100
       initial-size: 1
       max-wait: 60000
       min-idle: 1
       time-between-eviction-runs-millis: 60000
       min-evictable-idle-time-millis: 30000
       validation-query: select 'X'
       test-while-idle: true
       test-on-borrow: false
       test-on-return: false
       max-pool-prepared-statement-per-connection-size: 20
       max-open-prepared-statements: 50
       
       # 配置監控服務器
       stat-view-servlet:
         # 這裏一定要配置true,不配置則是使用默認值false,空白頁面
         enabled: true
         login-username: root
         login-password: sa
         reset-enable: false
         url-pattern: /druid/*

參數說明

  • max-active:最大連接數
  • initial-size: 初始化連接數
  • min-idle:最小連接數
  • max-wait:等待最長時間
  • time-between-eviction-runs-millis:間隔多久檢測一次
  • min-evictable-idle-time-millis:一個連接池最小的生存時間
  • filters: stat,wall,log4j,config,配置監控統計攔截的filers,如果沒有,則監控界面無法統計,‘wall’用於防火牆

Druid提供以下幾種Filter

Druid-spring-boot-starter簡化了一些配置,如果需要自定義配置,參考Druid-spring-boot-starte自定義配置


測試

瀏覽器輸入localhost:8090/druid,會自動跳轉到登錄界面

輸入監控服務配置中的login-username和login-password,進入控制檯頁面

測試接口

執行分頁查詢的接口

進入控制檯,查看SQL監控。

從SQL監控發現,執行了2條SQL。調用一個接口,執行了2條SQL,這是爲什麼?

答:剛纔說到這是分頁查詢接口,使用mybatis分頁查詢時,要寫2條SQL,一條查詢Count(*),一條是分頁查詢。由於接口使用了pagehelper插件,它簡化了mybatis的sql,開發者只用寫一條查詢所有數據的SQL,它會自動攔截,進行分頁,因此實際上是執行了2條SQL。

同時從圖中還發現發現,執行select count(*)語句耗時14毫秒,druid給出了"最慢"提示。實際上這張表只有3行,7個字段。由此可見select count()要慎用。

還可以看到url的監控,具體執行了哪些api接口,這裏都可以查看


問題

1.出現如下錯誤信息,是缺少log4j依賴,在pom.xml引入依賴,即可

  1. druid監控頁面空白

檢查stat-view-servlet監控服務配置是否開啓,將enable設置爲true

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章