SpringBoot+Druid開(kāi)啟監(jiān)控頁(yè)面的實(shí)現(xiàn)示例
介紹
Druid 是一個(gè)開(kāi)源的數(shù)據(jù)庫(kù)連接池項(xiàng)目,由阿里巴巴集團(tuán)開(kāi)發(fā)并貢獻(xiàn)給開(kāi)源社區(qū)。它在Java領(lǐng)域中以其高性能、強(qiáng)大功能和易用性著稱(chēng),是Java應(yīng)用中廣泛使用的數(shù)據(jù)庫(kù)連接池組件之一。
Druid 的主要特點(diǎn)包括:
- 高性能與低延遲: Druid 實(shí)現(xiàn)了高效的數(shù)據(jù)庫(kù)連接管理,支持快速獲取和釋放數(shù)據(jù)庫(kù)連接,從而提升系統(tǒng)性能。
- 監(jiān)控與統(tǒng)計(jì):內(nèi)建強(qiáng)大的監(jiān)控功能,能夠?qū)崟r(shí)統(tǒng)計(jì)SQL執(zhí)行情況、連接使用狀況等信息,方便開(kāi)發(fā)者優(yōu)化SQL語(yǔ)句和數(shù)據(jù)庫(kù)配置,并且可以與各種監(jiān)控系統(tǒng)集成。
- 擴(kuò)展性:支持SQL解析與攔截,允許自定義插件來(lái)增強(qiáng)功能,比如SQL黑名單、白名單過(guò)濾,防止SQL注入攻擊,以及慢查詢(xún)?nèi)罩居涗浀取?/li>
- 資源控制:提供了完善的連接池配置選項(xiàng),如連接數(shù)限制、超時(shí)時(shí)間設(shè)置、空閑連接檢測(cè)與回收機(jī)制等,有助于更好地管理和控制數(shù)據(jù)庫(kù)資源。
- 標(biāo)準(zhǔn)接口實(shí)現(xiàn):Druid 實(shí)現(xiàn)了JDBC的標(biāo)準(zhǔn)接口 javax.sql.DataSource,因此可以在任何兼容JDBC的應(yīng)用程序中輕松替換傳統(tǒng)的數(shù)據(jù)庫(kù)連接方式。
- 并發(fā)與線程安全:設(shè)計(jì)上充分考慮了高并發(fā)環(huán)境下的性能與穩(wěn)定性,保證多線程環(huán)境下數(shù)據(jù)庫(kù)連接的安全使用。
盡管在實(shí)際測(cè)試中,其他如HikariCP等連接池在某些場(chǎng)景下可能表現(xiàn)更優(yōu),但 Druid 由于其全面的功能集和良好的社區(qū)支持,在生產(chǎn)環(huán)境中仍被廣泛應(yīng)用。
我記得Springboot2.0以上版本默認(rèn)集成的是Hikari。Druid已經(jīng)被阿里棄用了。
為什么寫(xiě)?
因?yàn)榫W(wǎng)上資料一大把,但是我用了幾個(gè)發(fā)現(xiàn)并不能打開(kāi)druid的監(jiān)控頁(yè)面,而且很多一大串配置根本沒(méi)有生效,或者說(shuō)根本就不是這樣的。(當(dāng)然我也沒(méi)完全理解到全部?jī)?nèi)容)
1、引入POM
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
2、yaml文件配置
server:
port: 8099
spring:
datasource:
druid:
url: 數(shù)據(jù)庫(kù)連接地址
username: 數(shù)據(jù)庫(kù)賬號(hào)
password: 數(shù)據(jù)庫(kù)密碼
driver-class-name: com.mysql.cj.jdbc.Driver
# 初始化物理鏈接的個(gè)數(shù)
initial-size: 5
# 最大連接池?cái)?shù)量
max-active: 30
# 最小 連接池?cái)?shù)量
min-idle: 5
# 獲取連接時(shí)最大等待時(shí)間,單位毫秒 timeout鏈接超時(shí)
max-wait: 60000
# 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒 檢測(cè)非核心鏈接的時(shí)間
#既作為檢測(cè)的間隔時(shí)間又作為testWhileIdel執(zhí)行的依據(jù)
time-between-eviction-runs-millis: 60000
# 連接保持空閑而不被驅(qū)逐的最小時(shí)間
min-evictable-idle-time-millis: 30000
# 用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢(xún)語(yǔ)句 8小時(shí)問(wèn)題 8個(gè)小時(shí)沒(méi)跟mysql通信mysql會(huì)主動(dòng)關(guān)閉該鏈接
validation-query: SELECT 1 FROM DUAL
# 建議配置為true,不影響性能,并且保證安全性。申請(qǐng)連接的時(shí)候檢測(cè),
# 如果空閑時(shí)間大于min-evictable-idle-time-millis,執(zhí)行validationQuery檢測(cè)連接是否有效。
test-while-idle: true
# 申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。
test-on-borrow: false
# 歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。
test-on-return: false
# 是否緩存preparedStatement,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫(kù)性能提升巨大,
# 比如說(shuō)oracle。在mysql下建議關(guān)閉。不是mysql端,鏈接端,select * from student 查詢(xún)緩存
pool-prepared-statements: true
# 要啟用PSCache,必須配置大于0,當(dāng)大于0時(shí),poolPreparedStatements自動(dòng)觸發(fā)修改為true。
max-pool-prepared-statement-per-connection-size: 50
#調(diào)優(yōu)相關(guān):基本上任何一個(gè)項(xiàng)目的性能瓶頸 1.io 2.cpu計(jì)算量
# 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì)
filters: stat,wall
# 通過(guò)connectProperties屬性來(lái)打開(kāi)mergeSql功能;慢SQL記錄 慢查詢(xún):增刪改查
connection-properties: druid.stat.mergeSql=true;
filter:
stat:
slow-sql-millis: 1
# 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)
use-global-data-source-stat: true
# # druid連接池監(jiān)控
# stat-View-Servlet:
# login-username: admin
# login-password: 1101165230
# 排除一些靜態(tài)資源,以提高效率
web-stat-filter:
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
3、創(chuàng)建配置類(lèi)
/**
* @author by Guoshun
* @version 1.0.0
* @description druid
* @date 2024/2/4 17:15
*/
@Configuration//放入容器中
public class DruidConfig {
//
// @Bean
// //綁定配置文件前綴為spring.datasource
// @ConfigurationProperties(prefix = "spring.datasource.druid")
// public DataSource druidDataSource(){
// return new DruidDataSource();
// }
/**
* 返回后臺(tái)監(jiān)控servlet
*/
@Bean
public ServletRegistrationBean monitor(){
//請(qǐng)求
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后臺(tái)需要用戶(hù)登錄,賬號(hào)密碼配置
HashMap<String, String> initParameters = new HashMap<>();
//增加配置
//登錄key是固定的loginUsername loginPassword
//TODO 這里改成你需要的用戶(hù)名和密碼
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","1101165230");
//訪問(wèn)白名單
// initParameters.put("allow","ip地址");
bean.setInitParameters(initParameters);//設(shè)置初始化參數(shù)
return bean;
}
/**
* filter
* @return
*/
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<Filter> filterBean = new FilterRegistrationBean<>();
filterBean.setFilter(new WebStatFilter());
//可以過(guò)濾那些請(qǐng)求
Map<String, String> initParameters = new HashMap<>();
//不統(tǒng)計(jì)這些東西
initParameters.put("exclusions","*.js,*.css,/druid/*");
filterBean.setInitParameters(initParameters);
return filterBean;
}
}
啟動(dòng)項(xiàng)目輸入地址:http://ip:port/druid/login.html

到此這篇關(guān)于SpringBoot+Druid開(kāi)啟監(jiān)控頁(yè)面的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot Druid開(kāi)啟監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成Druid監(jiān)控慢SQL的詳細(xì)過(guò)程
- Springboot整合Druid實(shí)現(xiàn)對(duì)訪問(wèn)的監(jiān)控方式
- SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能的示例代碼
- SpringBoot3整合Druid監(jiān)控功能的項(xiàng)目實(shí)踐
- SpringBoot整合Druid實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池和監(jiān)控
- springboot項(xiàng)目中實(shí)現(xiàn)訪問(wèn)druid內(nèi)置監(jiān)控頁(yè)面
- SpringBoot集成Druid監(jiān)控頁(yè)面最小化配置操作
- SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例
- 使用SpringBoot簡(jiǎn)單了解Druid的監(jiān)控系統(tǒng)的配置方法
- spring boot基于DRUID實(shí)現(xiàn)數(shù)據(jù)源監(jiān)控過(guò)程解析
- Spring Boot 整合 Druid 并開(kāi)啟監(jiān)控
相關(guān)文章
解決idea打包成功但是resource下的文件沒(méi)有成功的問(wèn)題
這篇文章主要介紹了解決idea打包成功但是resource下的文件沒(méi)有成功的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
有關(guān)ServletConfig與ServletContext的訪問(wèn)
下面小編就為大家?guī)?lái)一篇有關(guān)ServletConfig與ServletContext的訪問(wèn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Spring中過(guò)濾器(Filter)和攔截器(Interceptor)到底啥區(qū)別詳解
在Spring框架中過(guò)濾器(Filter)和攔截器(Interceptor)都是用于處理HTTP請(qǐng)求的重要組件,但它們的工作原理和執(zhí)行順序有所不同,這篇文章主要介紹了Spring中過(guò)濾器(Filter)和攔截器(Interceptor)到底啥區(qū)別的相關(guān)資料,需要的朋友可以參考下2026-04-04
SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制案例詳解
這篇文章主要介紹了SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制,分別為每個(gè)用戶(hù)擬定四種在線狀態(tài),通過(guò)流程圖給大家展示,需要的朋友可以參考下2021-05-05
解決IDEA創(chuàng)建maven項(xiàng)目時(shí)pom.xml沒(méi)有變藍(lán)的問(wèn)題
這篇文章主要介紹了解決IDEA創(chuàng)建maven項(xiàng)目時(shí)pom.xml沒(méi)有變藍(lán)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Struts2學(xué)習(xí)筆記(9)-Result配置全局結(jié)果集
這篇文章主要介紹Struts2中使用Result配置全局結(jié)果集的方法,希望能給大家做一個(gè)參考。2016-06-06
SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證
這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Java實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)的自動(dòng)備份和自動(dòng)還原
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)的自動(dòng)備份和自動(dòng)還原,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11

