Druid 是阿里巴巴開源平臺上的一個項目,整個項目由數(shù)據(jù)庫連接池、插件框架和 SQL 解析器組成,該項目主要是為了擴(kuò)展 JDBC 的一些限制,可以讓程序員實(shí)現(xiàn)一些特殊的需求,比如向密鑰服務(wù)請求憑證、統(tǒng)計 SQL 信息、SQL 性能收集、SQL 注入檢查、SQL 翻譯等,程序員可以通過定制來實(shí)現(xiàn)自己需要的功能。通常叫"德魯伊的"
Druid 首先是一個數(shù)據(jù)庫連接池,但它不僅僅是一個數(shù)據(jù)庫連接池,還包含了一個 ProxyDriver,一系列內(nèi)置的 JDBC 組件庫,一個 SQL Parser。在 Java 的世界中 Druid 是監(jiān)控做的最好的數(shù)據(jù)庫連接池,在功能、性能、擴(kuò)展性方面,也有不錯的表現(xiàn)。
替換其他 Java 連接池,Druid 提供了一個高效、功能強(qiáng)大、可擴(kuò)展性好的數(shù)據(jù)庫連接池。
可以監(jiān)控數(shù)據(jù)庫訪問性能,Druid 內(nèi)置提供了一個功能強(qiáng)大的 StatFilter 插件,能夠詳細(xì)統(tǒng)計 SQL 的執(zhí)行性能,這對于線上分析數(shù)據(jù)庫訪問性能有很大幫助。
數(shù)據(jù)庫密碼加密。直接把數(shù)據(jù)庫密碼寫在配置文件中,這是不好的行為,容易導(dǎo)致安全問題,DruidDruiver 和 DruidDataSource 都支持 PasswordCallback。
SQL 執(zhí)行日志,Druid 提供了不同的 LogFilter,能夠支持 Common-Logging、Log4j 和 JdkLog,可以按需要選擇相應(yīng)的 LogFilter,監(jiān)控應(yīng)用的數(shù)據(jù)庫訪問情況。
擴(kuò)展 JDBC,如果你要對 JDBC 層有編程的需求,可以通過 Druid 提供的 Filter 機(jī)制,很方便編寫 JDBC 層的擴(kuò)展插件。
阿里也未Druid提供了 Spring Boot Starter。官網(wǎng)這樣解釋:
Druid Spring Boot Starter 用于幫助你在 Spring Boot 項目中輕松集成 Druid 數(shù)據(jù)庫連接池和監(jiān)控。
Druid Spring Boot Starter 主要做了哪些事情呢?其實(shí)這個組件包很簡單,主要提供了很多自動化的配置,按照 Spring Boot 的理念對很多內(nèi)容進(jìn)行了預(yù)配置,讓我們在使用的時候更加的簡單和方便。
添加依賴包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--自啟動Druid管理后臺-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
application.properties中添加druid的配置項
properties
#config druid
#連接池的設(shè)置
#初始化時建立物理連接的個數(shù)
spring.datasource.druid.initial-size=5
#最小連接池數(shù)量
spring.datasource.druid.min-idle=5
#最大連接池數(shù)量 maxIdle已經(jīng)不再使用
spring.datasource.druid.max-active=20
#獲取連接時最大等待時間,單位毫秒
spring.datasource.druid.max-wait=60000
#申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
spring.datasource.druid.test-while-idle=true
#既作為檢測的間隔時間又作為testWhileIdel執(zhí)行的依據(jù)
spring.datasource.druid.time-between-eviction-runs-millis=60000
#銷毀線程時檢測當(dāng)前連接的最后活動時間和當(dāng)前時間差大于該值時,關(guān)閉當(dāng)前連接
spring.datasource.druid.min-evictable-idle-time-millis=30000
#用來檢測連接是否有效的sql 必須是一個查詢語句
#mysql中為 select 'x'
#oracle中為 select 1 from dual
spring.datasource.druid.validation-query=select 'x'
#申請連接時會執(zhí)行validationQuery檢測連接是否有效,開啟會降低性能,默認(rèn)為true
spring.datasource.druid.test-on-borrow=false
#歸還連接時會執(zhí)行validationQuery檢測連接是否有效,開啟會降低性能,默認(rèn)為true
spring.datasource.druid.test-on-return=false
#當(dāng)數(shù)據(jù)庫拋出不可恢復(fù)的異常時,拋棄該連接
#spring.datasource.druid.exception-sorter=true
#是否緩存preparedStatement,mysql5.5+建議開啟
#spring.datasource.druid.pool-prepared-statements=true
#當(dāng)值大于0時poolPreparedStatements會自動修改為true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#配置擴(kuò)展插件
spring.datasource.druid.filters=stat,wall
#通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
spring.datasource.druid.use-global-data-source-stat=true
#設(shè)置訪問druid監(jiān)控頁的賬號和密碼,默認(rèn)沒有
#spring.datasource.druid.stat-view-servlet.login-username=admin
#spring.datasource.druid.stat-view-servlet.login-password=admin
然后啟動項目。
訪問地址:http://localhost:8080/druid/webapp.html
如果把配置項中
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
去掉注釋,再次啟動。
訪問地址:http://localhost:8080/druid/webapp.html
登錄進(jìn)去
首頁會展示項目使用的 JDK 版本、數(shù)據(jù)庫驅(qū)動、JVM 相關(guān)統(tǒng)計信息。根據(jù)上面的菜單可以看出 Druid 的功能非常強(qiáng)大,支持?jǐn)?shù)據(jù)源、SQL 監(jiān)控、SQL 防火墻、URI 監(jiān)控等很多功能。
我們這里請求一下前面文
http://localhost:8080/mybatis
點(diǎn)擊SQL監(jiān)控
可以看到SQL的執(zhí)行情況,還可以設(shè)置刷新SQL監(jiān)控的時間。
這里的 SQL 監(jiān)控會將項目中具體執(zhí)行的 SQL 打印出來,展示此 SQL 執(zhí)行了多少次、每次返回多少數(shù)據(jù)、執(zhí)行的時間分布是什么。這些功能非常的實(shí)用,方便我們在實(shí)際生產(chǎn)中查找出慢 SQL,最后對 SQL 進(jìn)行調(diào)優(yōu)。
OK,今天就分享到此,是不是覺得Spring Boot集成Druid其實(shí)還是蠻簡單的。
碼字不易,望點(diǎn) 在看+分享,謝謝!
聯(lián)系客服