基于dynamic的Druid 與 HikariCP 連接池集成配置區別

你提供的內容是關于 ??dynamic-datasource-spring-boot-starter?? 的詳細介紹,這是一個非常實用的 ??Spring Boot 多數據源動態切換組件??,適用于需要在單個應用中連接多個數據庫并靈活切換數據源的場景。下面我為你梳理一下該組件的核心信息與使用要點,方便你快速理解與應用:


📦 組件簡介

??dynamic-datasource-spring-boot-starter?? 是一個基于 Spring Boot 的 ??多數據源動態切換啟動器??,支持:

  • ??Spring Boot 1.5.x、2.x.x、3.x.x??
  • ??JDK 1.7+??

?? ??注意:JPA 用戶不建議使用本組件,因為 JPA 自帶事務管理,難以實現數據源的動態切換。??


? 核心特性

特性說明
??多數據源支持??支持純粹多庫、讀寫分離、一主多從、混合模式等
??數據源分組??可將多個數據源歸為一組,如讀庫組、寫庫組,支持負載均衡
??敏感信息加密??支持數據庫密碼等敏感配置加密,如 ENC(...),可自定義加密策略
??懶加載 & 無數據源啟動??支持按需加載數據源,應用啟動時可以不加載所有數據源
??自定義數據源來源??支持從數據庫或其他方式動態加載數據源配置
??動態增刪數據源??支持運行時動態添加或移除數據源
??注解驅動切換??通過 @DS 注解(可繼承)靈活指定數據源,支持類/方法級別
??多數據源事務??提供本地多數據源事務方案,也支持集成 Seata 分布式事務
??支持多種連接池??Druid(推薦監控)、HikariCP(推薦性能)、BeeCP、DBCP2、JNDI 等
??SpEL 動態參數解析??支持基于 SpEL、Session、Header 等動態選擇數據源,可擴展
??多層嵌套切換??支持 Service 層方法間多次數據源切換(A → B → C)
??MyBatis / MyBatis-Plus 友好??提供與 MyBatis 及 MyBatis-Plus 的良好集成
??Quartz / ShardingSphere / P6Spy 等兼容??提供對這些常用組件的集成方案

🛠? 使用方法

1. 引入依賴

Spring Boot 3.x 推薦:
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.2.0</version>
</dependency>
如需使用 Druid 連接池(可選):
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.18</version>
</dependency>

?? 注意:不要同時引入 HikariCP 和 Druid,避免沖突。


2. 配置數據源(application.yml)

基礎配置示例:
spring:datasource:dynamic:primary: master           # 默認數據源strict: false             # 未找到數據源是否拋異常datasource:master:url: jdbc:mysql://localhost:3306/db_masterusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3307/db_slaveusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
連接池配置示例(以 HikariCP 為例):
spring:datasource:dynamic:datasource:master:hikari:maximum-pool-size: 20minimum-idle: 5connection-timeout: 30000
Druid 配置示例:
spring:datasource:dynamic:datasource:master:type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 5max-active: 20filters: stat,wall,log4jvalidation-query: SELECT 1

3. 使用 @DS 注解切換數據源

類級別 + 方法級別覆蓋:
@Service
@DS("slave") // 默認使用 slave 數據源
public class UserService {@DS("master") // 此方法使用 master 數據源public User getMasterData() {// ...}public User getSlaveData() {// 使用類上配置的 slave 數據源}
}
手動切換(編程式):
// 切換到 slave 數據源
DynamicDataSourceContextHolder.push("slave");try {// 執行操作,如調用 Mapper/DAO
} finally {// 恢復默認數據源DynamicDataSourceContextHolder.poll();
}

🧩 高級功能

1. 動態數據源擴展

你可以編程方式動態添加數據源,比如從數據庫加載配置后動態注冊:

@Bean
public DataSource dynamicDataSource(DataSourceProperties properties) {DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();dataSource.addDataSource("custom", createDataSource("jdbc:mysql://custom-db:3306/db"));return dataSource;
}private DataSource createDataSource(String url) {DriverManagerDataSource ds = new DriverManagerDataSource();ds.setUrl(url);ds.setUsername("root");ds.setPassword("123456");return ds;
}

2. 監控

HikariCP 監控(推薦):

通過 Actuator 查看連接池狀態:

management:endpoints:web:exposure:include: health,metricsmetrics:tags:application: ${spring.application.name}

訪問指標:
http://localhost:8080/actuator/metrics/hikaricp.connections.active

Druid 監控:
spring:datasource:dynamic:datasource:master:druid:stat-view-servlet:enabled: trueurl-pattern: /druid/*allow: 127.0.0.1

訪問地址::8080/druid


📌 使用建議 & 最佳實踐

場景推薦方案
??高并發、追求性能??使用 ??HikariCP??,配置合理的 maximum-pool-size(如 20~50,視機器配置而定)
??需要 SQL 防火墻、加密、監控??使用 ??Druid??,但注意配置復雜、啟動慢
??讀寫分離??可使用 @DS 注解或配置多數據源組,結合負載均衡策略
??分布式事務??可集成 ??Seata??,或使用本地事務方案
??動態增刪數據源??使用提供的 API 動態注冊/注銷數據源,適合多租戶等場景

?? 注意事項

  1. ??JPA 不推薦使用本組件??,因 JPA 自身事務管理機制與動態數據源切換存在沖突。
  2. ??不要同時使用 HikariCP 和 Druid??,否則易出現 NoClassDefFoundError 等問題。
  3. ??方法上的 @DS 注解優先級高于類上??。
  4. ??DS 注解支持繼承,但僅限于抽象類,不支持接口繼承。??
  5. ??默認主數據源是 master,可通過 spring.datasource.dynamic.primary 修改。??

📚 總結

??dynamic-datasource-spring-boot-starter?? 是一個功能全面、擴展靈活、適用于生產環境的多數據源管理組件,特別適合以下業務場景:

  • 多租戶系統(每個租戶獨立庫)
  • 讀寫分離架構
  • 數據分片/多庫并行
  • 需要動態切換數據源的微服務模塊
  • 需要高度自定義數據源配置與管理的系統

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

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

相關文章

算法訓練之棧

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

OpenAI 最新開源模型 gpt-oss (Windows + Ollama/ubuntu)本地部署詳細教程

OpenAI 最近發布了其首個開源的開放權重模型gpt-oss&#xff0c;這在AI圈引起了巨大的轟動。對于廣大開發者和AI愛好者來說&#xff0c;這意味著我們終于可以在自己的機器上&#xff0c;完全本地化地運行和探索這款強大的模型了。 本教程將一步一步指導你如何在Windows系統上&…

在X86架構Linux中創建虛擬根目錄并下載指定架構(如aarch64)的軟件包(含依賴)

在X86架構Linux中創建虛擬根目錄并下載指定架構(如aarch64)的軟件包(含依賴) 在Linux系統中&#xff0c;有時候我們需要在特定的環境或架構下安裝軟件包&#xff0c;而不影響主系統。一種常見的方法是創建一個虛擬的根目錄&#xff0c;并在此環境中操作。本文將介紹如何通過創建…

scratch筆記和練習-第9課:一起來繪畫

位圖也稱為點陣圖&#xff0c;它是由許許多多的點組成的&#xff0c;這些點被稱為像素。位圖圖像可以表現豐富的多彩變化 并產生逼真的效果&#xff0c;很容易在不同軟件之間交換使用&#xff0c; 但它在保存圖像時需要記錄每一個像素的色彩信息&#xff0c;所以占用的存儲空間…

[linux] Linux:一條指令更新DDNS

Linux&#xff1a;一條指令更新DDNS 在動態IP環境下&#xff0c;如何確保我們的域名始終指向正確的公網IP地址&#xff1f;動態DNS&#xff08;DDNS&#xff09;服務為我們提供了完美的解決方案。今天&#xff0c;我將分享一個簡潔高效的Linux命令行指令&#xff0c;用于自動更…

[激光原理與應用-182]:測量儀器 - 光束型 - 光束質量分析儀

光束質量分析儀是用于精確評估激光光束特性的核心設備&#xff0c;通過測量光束的強度分布、相位分布、發散角等參數&#xff0c;為激光系統的優化、加工工藝控制及科研實驗提供關鍵數據支持。以下是光束質量分析儀的詳細解析&#xff1a;一、核心功能 - 光束強度分布分析測量內…

Linux 限制 root 登錄 IP 地址的方法

Linux 限制 root 登錄 IP 地址的方法Linux 限制 root 登錄 IP 地址的方法方法一&#xff1a;修改 SSH 配置文件方法二&#xff1a;使用 hosts.allow 和 hosts.deny 文件方法三&#xff1a;使用防火墻規則方法四&#xff1a;使用 access.conf 文件注意事項Linux 限制 root 登錄 …

Word中怎樣插入特殊符號

使用 “插入” 菜單&#xff1a;插入常用符號&#xff1a;將光標置于要插入符號的位置&#xff0c;點擊 “插入” 選項卡&#xff0c;在 “符號” 組中點擊 “符號” 按鈕&#xff0c;會彈出一個符號庫&#xff0c;里面包含了常見的標點符號、特殊字符等&#xff0c;找到所需符…

Linux 內核發包流程與路由控制實戰

Linux 內核發包流程與路由控制實戰 在網絡調優、性能優化、SDN、NFV、容器網絡等場景下&#xff0c;理解 Linux 內核發包路徑和路由控制機制是必修課。 本文將從內核網絡棧的原理入手&#xff0c;再結合 iproute2 命令和 策略路由給出實戰案例。一、Linux 內核發包流程&#xf…

點播服務器

早期的時候&#xff0c;用 live555 作為 rtsp 點播服務器&#xff1b;現在比較常用的 流媒體服務器比較多&#xff1b;這里比較簡單的&#xff0c;可以用 ZLMediakit&#xff1b;可以支持 ffmeg 退流 到ZLMediakit&#xff0c;然后別的客戶端從 ZLMediakit 服務器拉流&#xff…

分享超圖提供的、很不錯的WebGIS學習資源

最近在學習了解Supermap iclient&#xff0c;發現官方提供的幫助文檔、GIS學堂真的不錯&#xff0c;解釋了很多的內容。 官方modern-web-gis-in-action文檔的網址如下&#xff1a;https://iclient.supermap.io/web/books/modern-web-gis-in-action/&#xff0c;在其中介紹了現代…

通信算法之298: verilog語法generate和for介紹

在 Verilog 中&#xff0c;generate和for是實現參數化設計和模塊實例化復用的重要工具&#xff0c;尤其在需要根據參數動態生成邏輯時非常有用。以下是它們的使用方法和區別&#xff1a;1. for循環&#xff08;過程塊內&#xff09;for循環主要用于過程塊&#xff08;always/in…

laravel在cli模式下輸出格式漂亮一些

在 Laravel 的 CLI 模式下&#xff0c;可以通過以下方式讓命令行輸出更加美觀和專業&#xff1a; 1. 使用 Artisan 輸出助手方法 Laravel 提供了多種輸出樣式方法&#xff1a; public function handle() {// 基礎樣式$this->info(成功信息 - 綠色); // 綠色$this->err…

大數據管理與應用學什么?就業前景怎么樣?

前言在數字經濟蓬勃發展的今天&#xff0c;大數據已經成為推動社會進步的核心生產要素。大數據管理與應用作為新興交叉學科&#xff0c;正受到越來越多學生和企業的關注。本文將全面剖析該專業的課程體系、核心技能要求&#xff0c;詳細介紹CDA數據分析師認證的備考策略&#x…

mac筆記本如何重新設置ssh key

要在Mac上重新生成SSH密鑰并將其添加到平臺&#xff0c;可以按照以下步驟操作&#xff1a; 打開終端 在Mac上&#xff0c;你可以通過Spotlight搜索&#xff08;按Command Space&#xff09;輸入Terminal來打開終端或者直接搜索終端檢查現有SSH密鑰 首先&#xff0c;檢查是否已…

Godot ------ 通過鼠標對節點進行操作

Godot ------ 通過鼠標對節點進行操作 引言 正文 引言 對于一個游戲,通過鼠標對游戲對象進行操作是非常普遍的行為,本文我們將以 Control 節點進行舉例,說明如何通過鼠標對 Control 節點進行移動操作。 正文 首先,我們創建一個 Contorl 節點,并將它的 Layout->Trans…

k8s 網絡插件 flannel calico

一、k8s 網絡概述 Kubernetes網絡是指在Kubernetes集群中不同組件之間進行通信和交互的網絡架構&#xff0c;每個容器都有自己的IP地址&#xff0c;這些容器組成了Pod&#xff0c;Pod是Kubernetes調度的最小單元。 Pod是Kubernetes中最小的部署單元&#xff0c;每個Pod都有一個…

易美教育榮膺“騰訊年度影響力國際教育品牌”雙獎加冕,見證中國國際教育力量的崛起

【騰訊新聞&#xff0c;北京訊】在剛剛圓滿落幕的“回響中國”騰訊新聞教育頻道年度論壇上&#xff0c;國際教育領域迎來了高光時刻&#xff1a;以美國華爾街為總部、深耕國際教育十余年的易美教育&#xff08;Easymay&#xff09;&#xff0c;憑借其持續創新的教育模式、國際化…

Chrome與Firefox瀏覽器安全運維配置命令大全:從攻防到優化的專業實踐

Chrome與Firefox瀏覽器安全運維配置命令大全&#xff1a;從攻防到優化的專業實踐 作者&#xff1a;高級網絡安全工程師 吉林?鎮賚融媒 劉曉偉 最后更新&#xff1a;2025年8月 適用對象&#xff1a;網絡安全、運維從業者 瀏覽器作為訪問互聯網資源的主要入口&#xff0c;其配置…

用 “故事 + 價值觀” 快速建立 IP 信任感

在知識變現、流量變現與粉絲變現的實踐中&#xff0c;IP 的核心競爭力在于用戶信任。“故事 價值觀” 的組合&#xff0c;能快速縮短與用戶的距離 —— 故事讓 IP 從抽象符號變為可感知的存在&#xff0c;價值觀則推動用戶從被動關注轉為主動認同&#xff0c;二者共同為變現筑…