javascript
Spring Boot 集成 Druid 监控数据源
關(guān)注“Java后端技術(shù)全棧”
回復(fù)“面試”獲取全套大廠面試資料
Druid 介紹
Druid 是阿里巴巴開源平臺(tái)上的一個(gè)項(xiàng)目,整個(gè)項(xiàng)目由數(shù)據(jù)庫連接池、插件框架和 SQL 解析器組成,該項(xiàng)目主要是為了擴(kuò)展 JDBC 的一些限制,可以讓程序員實(shí)現(xiàn)一些特殊的需求,比如向密鑰服務(wù)請(qǐng)求憑證、統(tǒng)計(jì) SQL 信息、SQL 性能收集、SQL 注入檢查、SQL 翻譯等,程序員可以通過定制來實(shí)現(xiàn)自己需要的功能。通常叫"德魯伊的"
Druid 首先是一個(gè)數(shù)據(jù)庫連接池,但它不僅僅是一個(gè)數(shù)據(jù)庫連接池,還包含了一個(gè) ProxyDriver,一系列內(nèi)置的 JDBC 組件庫,一個(gè) SQL Parser。在 Java 的世界中 Druid 是監(jiān)控做的最好的數(shù)據(jù)庫連接池,在功能、性能、擴(kuò)展性方面,也有不錯(cuò)的表現(xiàn)。
Druid 有何用?
替換其他 Java 連接池,Druid 提供了一個(gè)高效、功能強(qiáng)大、可擴(kuò)展性好的數(shù)據(jù)庫連接池。
可以監(jiān)控?cái)?shù)據(jù)庫訪問性能,Druid 內(nèi)置提供了一個(gè)功能強(qiáng)大的 StatFilter 插件,能夠詳細(xì)統(tǒng)計(jì) SQL 的執(zhí)行性能,這對(duì)于線上分析數(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,如果你要對(duì) JDBC 層有編程的需求,可以通過 Druid 提供的 Filter 機(jī)制,很方便編寫 JDBC 層的擴(kuò)展插件。
Spring ?Boot快速集成Druid
阿里也未Druid提供了 Spring Boot Starter。官網(wǎng)這樣解釋:
Druid Spring Boot Starter 用于幫助你在 Spring Boot 項(xiàng)目中輕松集成 Druid 數(shù)據(jù)庫連接池和監(jiān)控。
Druid Spring Boot Starter 主要做了哪些事情呢?其實(shí)這個(gè)組件包很簡(jiǎn)單,主要提供了很多自動(dòng)化的配置,按照 Spring Boot 的理念對(duì)很多內(nèi)容進(jìn)行了預(yù)配置,讓我們?cè)谑褂玫臅r(shí)候更加的簡(jiǎn)單和方便。
添加依賴包
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version> </dependency> <!--自啟動(dòng)Druid管理后臺(tái)--> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version> </dependency>application.properties中添加druid的配置項(xiàng)
properties #config?druid #連接池的設(shè)置 #初始化時(shí)建立物理連接的個(gè)數(shù) spring.datasource.druid.initial-size=5 #最小連接池?cái)?shù)量 spring.datasource.druid.min-idle=5 #最大連接池?cái)?shù)量?maxIdle已經(jīng)不再使用 spring.datasource.druid.max-active=20 #獲取連接時(shí)最大等待時(shí)間,單位毫秒 spring.datasource.druid.max-wait=60000 #申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效。 spring.datasource.druid.test-while-idle=true #既作為檢測(cè)的間隔時(shí)間又作為testWhileIdel執(zhí)行的依據(jù) spring.datasource.druid.time-between-eviction-runs-millis=60000 #銷毀線程時(shí)檢測(cè)當(dāng)前連接的最后活動(dòng)時(shí)間和當(dāng)前時(shí)間差大于該值時(shí),關(guān)閉當(dāng)前連接 spring.datasource.druid.min-evictable-idle-time-millis=30000 #用來檢測(cè)連接是否有效的sql?必須是一個(gè)查詢語句 #mysql中為?select?'x' #oracle中為?select?1?from?dual spring.datasource.druid.validation-query=select?'x' #申請(qǐng)連接時(shí)會(huì)執(zhí)行validationQuery檢測(cè)連接是否有效,開啟會(huì)降低性能,默認(rèn)為true spring.datasource.druid.test-on-borrow=false #歸還連接時(shí)會(huì)執(zhí)行validationQuery檢測(cè)連接是否有效,開啟會(huì)降低性能,默認(rèn)為true spring.datasource.druid.test-on-return=false #當(dāng)數(shù)據(jù)庫拋出不可恢復(fù)的異常時(shí),拋棄該連接 #spring.datasource.druid.exception-sorter=true #是否緩存preparedStatement,mysql5.5+建議開啟 #spring.datasource.druid.pool-prepared-statements=true #當(dāng)值大于0時(shí)poolPreparedStatements會(huì)自動(dòng)修改為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 #合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù) spring.datasource.druid.use-global-data-source-stat=true #設(shè)置訪問druid監(jiān)控頁的賬號(hào)和密碼,默認(rèn)沒有 #spring.datasource.druid.stat-view-servlet.login-username=admin #spring.datasource.druid.stat-view-servlet.login-password=admin然后啟動(dòng)項(xiàng)目。
訪問地址:http://localhost:8080/druid/webapp.html
如果把配置項(xiàng)中
去掉注釋,再次啟動(dòng)。
訪問地址:http://localhost:8080/druid/webapp.html
登錄進(jìn)去
首頁會(huì)展示項(xiàng)目使用的 JDK 版本、數(shù)據(jù)庫驅(qū)動(dòng)、JVM 相關(guān)統(tǒng)計(jì)信息。根據(jù)上面的菜單可以看出 Druid 的功能非常強(qiáng)大,支持?jǐn)?shù)據(jù)源、SQL 監(jiān)控、SQL 防火墻、URI 監(jiān)控等很多功能。
我們這里請(qǐng)求一下前面文
http://localhost:8080/mybatis
點(diǎn)擊SQL監(jiān)控
可以看到SQL的執(zhí)行情況,還可以設(shè)置刷新SQL監(jiān)控的時(shí)間。
這里的 SQL 監(jiān)控會(huì)將項(xiàng)目中具體執(zhí)行的 SQL 打印出來,展示此 SQL 執(zhí)行了多少次、每次返回多少數(shù)據(jù)、執(zhí)行的時(shí)間分布是什么。這些功能非常的實(shí)用,方便我們?cè)趯?shí)際生產(chǎn)中查找出慢 SQL,最后對(duì) SQL 進(jìn)行調(diào)優(yōu)。
OK,今天就分享到此,是不是覺得Spring Boot集成Druid其實(shí)還是蠻簡(jiǎn)單的。
IT技術(shù)分享社區(qū)
個(gè)人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)
總結(jié)
以上是生活随笔為你收集整理的Spring Boot 集成 Druid 监控数据源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯翻译君 VS 谷歌翻译
- 下一篇: 2020最新版SpringMVC面试题高