SpringBoot+Druid開啟監(jiān)控頁面的實現(xiàn)示例
介紹
Druid 是一個開源的數(shù)據(jù)庫連接池項目,由阿里巴巴集團(tuán)開發(fā)并貢獻(xiàn)給開源社區(qū)。它在Java領(lǐng)域中以其高性能、強(qiáng)大功能和易用性著稱,是Java應(yīng)用中廣泛使用的數(shù)據(jù)庫連接池組件之一。
Druid 的主要特點(diǎn)包括:
- 高性能與低延遲: Druid 實現(xiàn)了高效的數(shù)據(jù)庫連接管理,支持快速獲取和釋放數(shù)據(jù)庫連接,從而提升系統(tǒng)性能。
- 監(jiān)控與統(tǒng)計:內(nèi)建強(qiáng)大的監(jiān)控功能,能夠?qū)崟r統(tǒng)計SQL執(zhí)行情況、連接使用狀況等信息,方便開發(fā)者優(yōu)化SQL語句和數(shù)據(jù)庫配置,并且可以與各種監(jiān)控系統(tǒng)集成。
- 擴(kuò)展性:支持SQL解析與攔截,允許自定義插件來增強(qiáng)功能,比如SQL黑名單、白名單過濾,防止SQL注入攻擊,以及慢查詢?nèi)罩居涗浀取?/li>
- 資源控制:提供了完善的連接池配置選項,如連接數(shù)限制、超時時間設(shè)置、空閑連接檢測與回收機(jī)制等,有助于更好地管理和控制數(shù)據(jù)庫資源。
- 標(biāo)準(zhǔn)接口實現(xiàn):Druid 實現(xiàn)了JDBC的標(biāo)準(zhǔn)接口 javax.sql.DataSource,因此可以在任何兼容JDBC的應(yīng)用程序中輕松替換傳統(tǒng)的數(shù)據(jù)庫連接方式。
- 并發(fā)與線程安全:設(shè)計上充分考慮了高并發(fā)環(huán)境下的性能與穩(wěn)定性,保證多線程環(huán)境下數(shù)據(jù)庫連接的安全使用。
盡管在實際測試中,其他如HikariCP等連接池在某些場景下可能表現(xiàn)更優(yōu),但 Druid 由于其全面的功能集和良好的社區(qū)支持,在生產(chǎn)環(huán)境中仍被廣泛應(yīng)用。
我記得Springboot2.0以上版本默認(rèn)集成的是Hikari。Druid已經(jīng)被阿里棄用了。
為什么寫?
因為網(wǎng)上資料一大把,但是我用了幾個發(fā)現(xiàn)并不能打開druid的監(jiān)控頁面,而且很多一大串配置根本沒有生效,或者說根本就不是這樣的。(當(dāng)然我也沒完全理解到全部內(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ù)庫連接地址 username: 數(shù)據(jù)庫賬號 password: 數(shù)據(jù)庫密碼 driver-class-name: com.mysql.cj.jdbc.Driver # 初始化物理鏈接的個數(shù) initial-size: 5 # 最大連接池數(shù)量 max-active: 30 # 最小 連接池數(shù)量 min-idle: 5 # 獲取連接時最大等待時間,單位毫秒 timeout鏈接超時 max-wait: 60000 # 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 檢測非核心鏈接的時間 #既作為檢測的間隔時間又作為testWhileIdel執(zhí)行的依據(jù) time-between-eviction-runs-millis: 60000 # 連接保持空閑而不被驅(qū)逐的最小時間 min-evictable-idle-time-millis: 30000 # 用來檢測連接是否有效的sql,要求是一個查詢語句 8小時問題 8個小時沒跟mysql通信mysql會主動關(guān)閉該鏈接 validation-query: SELECT 1 FROM DUAL # 建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測, # 如果空閑時間大于min-evictable-idle-time-millis,執(zhí)行validationQuery檢測連接是否有效。 test-while-idle: true # 申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。 test-on-borrow: false # 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。 test-on-return: false # 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大, # 比如說oracle。在mysql下建議關(guān)閉。不是mysql端,鏈接端,select * from student 查詢緩存 pool-prepared-statements: true # 要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。 max-pool-prepared-statement-per-connection-size: 50 #調(diào)優(yōu)相關(guān):基本上任何一個項目的性能瓶頸 1.io 2.cpu計算量 # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計 filters: stat,wall # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 慢查詢:增刪改查 connection-properties: druid.stat.mergeSql=true; filter: stat: slow-sql-millis: 1 # 合并多個DruidDataSource的監(jiān)控數(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)建配置類
/** * @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(); // } /** * 返回后臺監(jiān)控servlet */ @Bean public ServletRegistrationBean monitor(){ //請求 ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); //后臺需要用戶登錄,賬號密碼配置 HashMap<String, String> initParameters = new HashMap<>(); //增加配置 //登錄key是固定的loginUsername loginPassword //TODO 這里改成你需要的用戶名和密碼 initParameters.put("loginUsername","admin"); initParameters.put("loginPassword","1101165230"); //訪問白名單 // 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()); //可以過濾那些請求 Map<String, String> initParameters = new HashMap<>(); //不統(tǒng)計這些東西 initParameters.put("exclusions","*.js,*.css,/druid/*"); filterBean.setInitParameters(initParameters); return filterBean; } }
啟動項目輸入地址:http://ip:port/druid/login.html
到此這篇關(guān)于SpringBoot+Druid開啟監(jiān)控頁面的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot Druid開啟監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Druid實現(xiàn)SQL監(jiān)控和數(shù)據(jù)庫密碼加密
- SpringBoot整合mybatis使用Druid做連接池的方式
- SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能
- springboot 整合druid及配置依賴
- 解決springboot整合druid遇到的坑
- springboot 整合druid數(shù)據(jù)庫密碼加密功能的實現(xiàn)代碼
- SpringBoot整合Druid數(shù)據(jù)源過程詳解
- 詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置
- Spring Boot 整合 Druid 并開啟監(jiān)控的操作方法
相關(guān)文章
windows如何使用bat腳本后臺啟動/停止和重啟jar包服務(wù)
這篇文章主要介紹了windows使用bat腳本后臺啟動/停止和重啟jar包服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java的方法和this關(guān)鍵字如何理解與應(yīng)用
Java語言中的“方法”(Method)在其他語言當(dāng)中也可能被稱為“函數(shù)”(Function)。對于一些復(fù)雜的代碼邏輯,如果希望重復(fù)使用這些代碼,并且做到“隨時任意使用”,那么就可以將這些代碼放在一個大括號{}當(dāng)中,并且起一個名字。使用代碼的時候,直接找到名字調(diào)用即可2021-10-10基于Spring AOP proxyTargetClass的行為表現(xiàn)總結(jié)
這篇文章主要介紹了Spring AOP proxyTargetClass的行為表現(xiàn)總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08