Spring Boot 3 集成 Druid 連接池詳解

在現代的Java應用中,使用一個高效可靠的數據源是至關重要的。Druid連接池作為一款強大的數據庫連接池,提供了豐富的監控和管理功能,成為很多Java項目的首選。本文將詳細介紹如何在Spring Boot 3項目中配置數據源,集成Druid連接池,以實現更高效的數據庫連接管理。

springboot3-druid.jpg

Spring Boot 3 配置數據源

Spring Boot 提供了自動配置(auto-configuration)功能,其中包括了對數據源的自動配置,我們只需要在項目中導入spring-boot-starter-jdbc依賴及對應數據源的驅動依賴即可,我們使用的mysql數據庫,pom依賴如下:

<!-- SPRINGBOOT JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Mysql驅動包 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>

配置文件如下:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.106:3306/xj_doc?characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456

Spring Boot默認使用 HikariCP 作為連接池,這是因為 HikariCP 提供了卓越的性能、低延遲和高效的資源利用。Spring Boot默認情況下會自動檢測 classpath 下是否存在 HikariCP。如果存在,Spring Boot 會將 HikariCP 作為默認的數據庫連接池。如果 classpath 下沒有 HikariCP,Spring Boot 會嘗試檢測其他連接池的存在,選擇順序如下:

-2023-12-06-2243.png

如果不想通過自動檢測的方式,我們可以在配置文件application.yml 中設置 spring.datasource.type 屬性,指定要使用的連接池類型的完整類名,示例如下:

spring:datasource:type: com.alibaba.druid.pool.DruidDataSource

Spring Boot 3 集成 Druid

Druid網址

Druid是Java語言中最好的數據庫連接池。Druid能夠提供強大的監控和擴展功能。在國內是是數據庫連接池的首選。

Druid的github網址:https://github.com/alibaba/druid

_20231209210619.jpg

引入依賴

在Spring Boot 3.x版本中引入依賴如下:

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version>
</dependency>

添加配置### 添加配置

配置文件如下:


spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.106:3306/xj_doc?characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456# druid 連接池管理druid:# 初始化時建立物理連接的個數initial-size: 5# 連接池的最小空閑數量min-idle: 5# 連接池最大連接數量max-active: 20# 獲取連接時最大等待時間,單位毫秒max-wait: 60000# 申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。test-while-idle: true# 既作為檢測的間隔時間又作為testWhileIdel執行的依據time-between-eviction-runs-millis: 60000# 銷毀線程時檢測當前連接的最后活動時間和當前時間差大于該值時,關閉當前連接(配置連接在池中的最小生存時間)min-evictable-idle-time-millis: 30000# 用來檢測數據庫連接是否有效的sql 必須是一個查詢語句(oracle中為 select 1 from dual)validation-query: select 'x'# 申請連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為truetest-on-borrow: false# 歸還連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為truetest-on-return: false# 是否緩存preparedStatement, 也就是PSCache,PSCache對支持游標的數據庫性能提升巨大,比如說oracle,在mysql下建議關閉。pool-prepared-statements: false# 置監控統計攔截的filters,去掉后監控界面sql無法統計,stat: 監控統計、Slf4j:日志記錄、waLL: 防御sqL注入filters: stat,wall,slf4j# 要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100max-pool-prepared-statement-per-connection-size: -1# 合并多個DruidDataSource的監控數據use-global-data-source-stat: true# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000web-stat-filter:# 是否啟用StatFilter默認值trueenabled: true# 添加過濾規則url-pattern: /*# 忽略過濾的格式exclusions: /druid/*,*.js,*.gif,*.jpg,*.png,*.css,*.icostat-view-servlet:# 是否啟用StatViewServlet默認值trueenabled: true# 訪問路徑為/druid時,跳轉到StatViewServleturl-pattern: /druid/*# 是否能夠重置數據reset-enable: false# 需要賬號密碼才能訪問控制臺,默認為rootlogin-username: druidlogin-password: druid# IP白名單allow: 127.0.0.1# IP黑名單(共同存在時,deny優先于allow)deny:

啟動項目

啟動項目,出現如下日志,則標識數據庫連接池已經使用了Druid。

2023-12-09T21:20:31.561+08:00  INFO 26176 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2023-12-09T21:20:32.328+08:00  INFO 26176 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited

訪問頁面

項目啟動后,我們可以通過訪問 Druid 控制臺來監控和管理數據庫連接池的狀態。控制臺的訪問地址通常是:http://localhost:8080/druid/login.html。

在訪問控制臺時,系統將要求輸入用戶名和密碼進行身份驗證。這些用戶名和密碼是在項目的配置文件中進行了配置的,

# 需要賬號密碼才能訪問控制臺,默認為root
login-username: druid
login-password: druid

_20231209212700.jpg

_20231209212717.jpg

至此,你已成功配置了數據源并集成了 Druid 連接池。通過合理配置 Druid 連接池的參數,你可以優化數據庫連接的性能和資源利用。同時,通過監控功能,你可以實時了解連接池的使用情況,及時發現潛在的問題。

總結

通過本文的介紹,你學會了如何在Spring Boot 3項目中配置數據源,集成Druid連接池,從而提高數據庫連接管理的效率。Druid連接池的監控和管理功能可以為你的應用提供更好的性能和可維護性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214550.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ACM獨立出版、確定的ISBN號】第三屆密碼學、網絡安全和通信技術國際會議(CNSCT 2024)

第三屆密碼學、網絡安全和通信技術國際會議&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 隨著互聯網和網絡應用的不斷發展&#xff0c;網絡安全在計算機科學中的地位越來越重要&…

Android Kotlin 泛型:強大的類型抽象和重用利器

一、什么是泛型&#xff1f; 泛型是一種參數化類型的機制&#xff0c;它允許我們在定義類、接口和方法時使用類型參數&#xff0c;從而實現代碼的重用和類型安全。通過使用泛型&#xff0c;我們可以將類型作為參數傳遞給類或方法&#xff0c;在不同的場景中實現靈活的類型適配…

精選:免費且高效的郵件營銷軟件推薦

好用的郵件營銷軟件可以幫助企業獲取客戶、維系客戶關系。對于有想做郵件營銷想法&#xff0c;但是想先試試的企業來講&#xff0c;免費版郵件營銷軟件就是個不錯的選擇。當然&#xff0c;免費的郵件郵件營銷軟件雖然在價格上有極大的優勢&#xff0c;但是功能上會有各種限制。…

Java生態系統最受歡迎的工具類使用指南 ?

???? 博主貓頭虎(????)帶您 Go to New World??? ?? 博客首頁——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發秘籍專欄》 ?? 學會IDEA常用操作,工作效率翻倍~?? ?…

【小白專用】MySQL查詢數據庫所有表名及表結構其注釋

一、先了解下INFORMATION_SCHEMA 1、在MySQL中&#xff0c;把INFORMATION_SCHEMA看作是一個數據庫&#xff0c;確切說是信息數據庫。其中保存著關于MySQL服務器所維護的所有其他數據庫的信息。如數據庫名&#xff0c;數據庫的表&#xff0c;表欄的數據類型與訪問權 限等。在INF…

網絡安全——SSH密碼攻擊實驗

一、實驗目的要求&#xff1a; 二、實驗設備與環境&#xff1a; 三、實驗原理&#xff1a; 四、實驗步驟&#xff1a;? 五、實驗現象、結果記錄及整理&#xff1a; 六、分析討論與思考題解答&#xff1a; 一、實驗目的要求&#xff1a; 1、了解SSH密碼攻擊、FTP密碼攻擊…

【BEV感知 EA-LSS 方案】Edge-aware Lift-splat-shot

前言 本文分享LSS方案的改進方案——EA-LSS,它解決了“深度跳變”問題,提出了一個新框架Edge-aware Lift-splat-shot 。 適用于“多視圖轉BEV”,可以代替原來的LSS模塊,并有效地提高了檢測精度,而推理時間的增加很少。 在nuScenes測試集上驗證,純相機模型或多模態模型…

Jmeter 請求簽名api接口-BeanShell

Jmeter 請求簽名api接口-BeanShell 項目簽名說明編譯擴展jar包jmeter 使用 BeanShell 調用jar包中的簽名方法 項目簽名說明 有簽名算法的api接口本地不好測試&#xff0c;使用BeanShell 擴展jar 包對參數進行簽名&#xff0c;接口簽名算法使用 sha512Hex 算法。簽名的說明如下…

Mybatis是如何進行分頁的?

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一份大廠面試資料《史上最全大廠面試題》&#xff0c;Springboot、微服務、算法、數據結構、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、數據庫等等 …

Django系列之Celery異步框架+RabbitMQ使用

在Django項目中&#xff0c;如何集成使用Celery框架來完成一些異步任務以及定時任務呢&#xff1f; 1. 安裝 pip install celery # celery框架 pip install django-celery-beat # celery定時任務使用 pip install django-celery-results # celery存儲結果使用2. Django集成…

gin投票系統3

對應視頻v1版本 1.優化登陸接口 將同步改為異步 原login前端代碼&#xff1a; <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>香香編程-投票項目</title> </head> <body> <m…

開關量防抖濾波器(梯形圖和SCL源代碼)

模擬量防抖超限報警功能塊請查看下面文章鏈接: https://rxxw-control.blog.csdn.net/article/details/133969425https://rxxw-control.blog.csdn.net/article/details/133969425 1、開關量防抖濾波器 2、防抖濾波 3、梯形圖代碼

useMemo和useCallback

useMemo和useCallback是React中的兩個優化性能的鉤子&#xff08;Hooks&#xff09;。它們都可以用來緩存計算結果&#xff0c;避免在每次渲染時都重新執行耗時的操作。然而&#xff0c;它們的主要區別在于緩存的內容和使用場景。 useMemo useMemo用于緩存那些計算成本較高的值…

2.Feign使用、上下文隔離及源碼閱讀

目錄 概述使用配置pom.xmlfeign 接口編寫controller 測試降級處理pom.xmlapplication.yml代碼 Feign如何初始化及調用源碼閱讀初始化調用 feign的上下文隔離機制源碼 結束 概述 閱讀此文&#xff0c;可以知曉 feign 使用、上下文隔離及源碼閱讀。源碼涉及兩方面&#xff1a;fe…

課后作業7.3.1:構造一個自己的小操作系統

構造一個自己的 mini 操作系統 任務描述 請實現如下功能&#xff1a; 1.寫一個命令解釋器程序 mysh.c &#xff0c;其功能是接收用戶輸入的命令并給出反饋。要求該程序既支持內部命令 cd、sync、exit &#xff1b;也支持外部命令&#xff0c;即可以接收 cat、ls 等命令&#x…

數據結構與算法-Rust 版讀書筆記-2線性數據結構-雙端隊列

數據結構與算法-Rust 版讀書筆記-2線性數據結構-雙端隊列 1、雙端隊列 deque又稱為雙端隊列&#xff0c;雙端隊列是與隊列類似的項的有序集合。deque有兩個端部&#xff1a;首端和尾端。deque不同于隊列的地方就在于項的添加和刪除是不受限制的&#xff0c;既可以從首尾兩端添…

vue3封裝接口

在src下面創建一個文件夾任意名稱 我拿這個名字舉例子了apiService 相當于創建一個新的文件 // 封裝接口 // apiService.js import axios from axios;// 接口前綴 const API_BASE_URL 前綴;接口后綴export const registerUser async (fileData) > {try {const response …

數據分析 | 頻率編碼和標簽編碼 | Python代碼

數據集見GitHub鏈接&#xff1a;https://github.com/ChuanTaoLai/Frequency-Encoding-And-Label-Encoding 標簽編碼&#xff1a; import pandas as pd from sklearn.preprocessing import LabelEncoderdata1 pd.read_excel(rD:\0文獻整理\網絡入侵檢測\KDD99\KDDTrain.xlsx) …

透析跳躍游戲

關卡名 理解與貪心有關的高頻問題 我會了?? 內容 1.理解跳躍游戲問題如何判斷是否能到達終點 ?? 2.如果能到終點&#xff0c;如何確定最少跳躍次數 ?? 1. 跳躍游戲 leetCode 55 給定一個非負整數數組&#xff0c;你最初位于數組的第一個位置。數組中的每個元素代表…

微信商家收款碼扣多少手續費

很多人想申請低手續費率的收款碼不知從何下手&#xff0c;在參考了大量博客教學之后&#xff0c;終于搞懂了詳細流程以及注意事項。在此記錄一下。我申請的是一個只需要0.2%費率的微信收款碼&#xff0c;申請時間是2022年2月12日。申請之前只需要準備營業執照和法人身份z&#…