SpringBoot【十一】mybatis-plus實現多數據源配置,開箱即用!

一、前言🔥

環境說明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

? ? ? ? 正常情況下我們在開發系統的時候都是使用一個數據源,但是由于有些項目同步數據的時候不想造成數據庫io消耗壓力過大,便會一個項目對應多個數據源,即就會有個問題,Springboot?配置db都是默認加載數據源連接,連接池默認配置,但是配置多個數據庫url,這該怎么實現呢?

? ? ? ? 不用擔心,我們就是為了解決而寫的,不用復雜的實現方式,什么Springboot+mybatis在配置文件中配置多個數據源,然后mapper指定連接配置等,不,不需要,我嫌太麻煩了,今天我就要給你們安利它:?**dynamic-datasource-spring-boot-starter,一個基于springboot的快速集成多數據源的啟動器,開箱即用,超級方便。**接下來我就為大家一一講解,雖然配置很簡單,但是坑也比較多,bug菌都為大家給淌過啦,你們就直接直接拿去用即可!

二、dynamic-datasource-spring-boot-starter

一、簡介

dynamic-datasource-spring-boot-starter 是一個基于springboot的快速集成多數據源的啟動器。

其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x

二、特性

  • 支持 數據源分組 ,適用于多種場景 純粹多庫 讀寫分離 一主多從 混合模式。
  • 支持數據庫敏感配置信息 加密 ENC()。
  • 支持每個數據庫獨立初始化表結構schema和數據庫database。
  • 支持無數據源啟動,支持懶加載數據源(需要的時候再創建連接)。
  • 支持 自定義注解 ,需繼承DS(3.2.0+)。
  • 提供并簡化對Druid,HikariCp,BeeCp,Dbcp2的快速集成。
  • 提供對Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等組件的集成方案。
  • 提供 自定義數據源來源 方案(如全從數據庫加載)。
  • 提供項目啟動后 動態增加移除數據源 方案。
  • 提供Mybatis環境下的 純讀寫分離 方案。
  • 提供使用 spel動態參數 解析數據源方案。內置spel,session,header,支持自定義。
  • 支持 多層數據源嵌套切換 。(ServiceA >>> ServiceB >>> ServiceC)。
  • 提供 **基于seata的分布式事務方案。
  • 提供 本地多數據源事務方案。

三、使用方法

1、老規矩,先引依賴包。引入dynamic-datasource-spring-boot-starter;

<!--配置多數據源-->
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version>
</dependency>

2、配置數據源。

spring:datasource:dynamic:primary: master #設置默認的數據源或者數據源組,默認值即為masterstrict: false #嚴格匹配數據源,默認false. true未匹配到指定數據源時拋異常,false使用默認數據源datasource:master:driver-class-name: com.mysql.cj.jdbc.Driver   #3.2.0開始支持SPI可省略此配置url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456slave_1:driver-class-name: com.mysql.cj.jdbc.Driver   #3.2.0開始支持SPI可省略此配置url: jdbc:mysql://127.0.0.1:3306/test_db2?setUnicode=true&characterEncoding=utf8username: rootpassword: 123456

拓展:同時也支持多主多從,多種不同庫及混合配置。

3、實戰演示:

我們先來指定配置環境:

配置好配置環境后,先啟動下項目,查看庫是否都正常連接。如下控制臺啟動打印的日志,表示兩庫都正常連接。

接著,我們先創建兩個實體,分別對應db1和db2的user表:

接著寫一個controller類;

接著接口實現層:

這里我就為大家講解一下了。

數據源切換,使用的是提供的?@DS?注解。

其中@DS 可以注解在方法上或類上,同時存在就近原則 方法上注解 優先于 類上注解。(所以你們看上邊,注解在類上使用的是主庫,但是基于下邊某個方法就是制定了從庫,但是我這樣放一起是為了給大家看比較,一般會直接分類寫,不會一個類上出現多個數據源。)

注:@DS("dsName")? ?dsName可以為組名也可以為具體某個庫的名稱。

4、訪問接口查看結果。

先是訪問接口1:localhost:8888/dbUser/query-users-for-db-one

如下請求結果,大家請看,成功拿到了db1庫中的數據。

再請求下接口2:localhost:8888/dbUser/query-users-for-db-two

如下請求結果,大家請看,成功拿到了db2庫中的數據。

再做個測試,我們把db1與db2中的數據同時返回,看看能否成功:

我們先寫兩接口,然后分別將數據用map返回:

請求結果如下:

然后給大家看下數據庫數據,以免被大家說是同一個庫中的數據。

好啦,以上就是同mysql數據源的配置流程及實例演示啦,如果還有啥不清楚的小伙伴,歡迎下方留言。接著就是針對后邊兩種配置方式,就自行嘗試啦,看上去都是一樣的。

有需求的小伙伴,看完之后,使用起來是不是很簡單,壓根不需要用傳統的mybatis配置多個連接器,mybatis-plus都幫我們封裝好啦,開箱即用。

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

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

相關文章

Node.js教程入門第一課:環境安裝

對于一個程序員來說&#xff0c;每學習一個新東西的時候&#xff0c;第一步基本上都是先進行環境的搭建&#xff01; 從本章節開始讓我們開始探索Node.js的世界吧! 什么是Node.js? 那么什么是Node.js呢&#xff1f;簡單的說Node.js 就是運行在服務端的 JavaScript JavaScript…

vim優化

1.編輯如下內容&#xff1a; cat > /root/.vimrc <<EOF set tabstop2 " 設置 Tab 為 2 個空格 set shiftwidth2 " 設置自動縮進為 2 個空格 set expandtab " 將 Tab 轉換為空格 " 基本設置 set number syntax on" 快捷鍵設置…

字符串性能對比

效率(1) : String.indexOf與String.contains效率測試_string contains效率-CSDN博客 結論是前者效率高&#xff0c;源碼里面conatins是使用indexof 在jdk8中contains直接調用的indexOf(其他版本沒有驗證),所以要說效率來說肯定是indexOf高,但contains也就多了一層方法棧,so 什…

移動網絡的原理

無線網絡是如何解決移動通信問題的 場景&#xff1a;用戶在一輛轎車內以150km/h的時速沿高速公路急速行駛時穿過多個無線接入網&#xff0c;用戶希望在整個旅程中保持一個與遠程應用的不間斷的TCP連接。 解決方案&#xff1a;移動節點的間接路由選擇方法可解決TCP鏈接不間斷的…

python學opencv|讀取圖像(十三)BGR圖像和HSV圖像互相轉換深入

【1】引言 前序學習過程中&#xff0c;我們偶然發現&#xff1a;如果原始圖像是png格式&#xff0c;將其從BGR轉向HSV&#xff0c;再從HSV轉回BGR后&#xff0c;圖像的效果要好于JPG格式。 文章鏈接為&#xff1a; python學opencv|讀取圖像&#xff08;十二&#xff09;BGR圖…

解決node.js的req.body為空的問題

從昨晚一直在試&#xff0c;明明之前用的封裝的axios發送請求給其他的后端&#xff08;springboot&#xff09;是可以的&#xff0c;但昨天用了新項目的后端&#xff08;node.js&#xff09;就不行。 之前用了代理&#xff0c;所以瀏覽器發送的post請求不會被攔截&#xff0c;…

【嵌入式】嵌入式面試題 36 問

1. volatile 是否可以修飾 const 是的&#xff0c;volatile 可以修飾 const。const 表示變量的值不能被修改&#xff0c;而 volatile 表示變量的值可能在程序之外被修改&#xff08;例如&#xff0c;由硬件修改&#xff09;。 將 volatile 用于 const 變量意味著該變量的值雖然…

java基礎概念49-數據結構2

一、樹 1-1、樹的基本概念 1、樹的節點 2、二叉樹 3、樹的高度 1-2、二叉查找樹 普通二叉樹沒有規律&#xff0c;不方便查找&#xff0c;沒什么作用。 1、基本概念 2、添加節點 此時&#xff0c;該方式添加形成的二叉查找樹&#xff0c;根節點就是第一個節點。 3、查找節點 4…

GhatGPT缺陷不足和商業應用

1. 引言 ChatGPT的興起&#xff1a; 2022年末推出&#xff0c;迅速在自然語言處理和人工智能領域引起廣泛關注。數億用戶體驗其強大智能&#xff0c;感嘆機器智能的飛速發展。 存在的缺陷&#xff1a; 事實性錯誤&#xff1a;生成的文本中包含錯誤信息。無法實時更新&#xff1…

【Linux】Macvlan介紹及LInux下例子實現

Macvlan Macvlan 是一種網絡虛擬化技術&#xff0c;允許在同一物理網絡接口上創建多個虛擬網絡接口&#xff0c;每個虛擬接口都有自己獨立的 MAC 地址。這對于需要在同一物理主機上運行多個網絡隔離的應用程序或容器時非常有用。 Macvlan 的特點和用途 獨立的 MAC 地址 每個 …

Jackson @JsonInclude 注解

1. 概述 Jackson 是一個著名的Java庫&#xff0c;以轉換Java對象為JSON格式以及從JSON反序列化回Java對象而聞名。有時候&#xff0c;我們可能希望僅在某些字段滿足特定條件時才將其包含在JSON輸出中&#xff0c;而Jackson的JsonInclude注解正是為此目的量身定制的。 JsonInc…

12.12 枚舉 共用體 數據結構 創建順序表

1.思維導圖 2. 創建順序表 1>頭文件 test.h #ifndef __TEST_H__ #define __TEST_H__#include<stdlib.h> #include<stdio.h> #include<string.h>#define MAX 30 //typedef int datatype;typedef struct sequence {int data[MAX];int len;}seqlist,*se…

next.js 存在緩存中毒漏洞(CVE-2024-46982)

免責聲明: 本文旨在提供有關特定漏洞的深入信息,幫助用戶充分了解潛在的安全風險。發布此信息的目的在于提升網絡安全意識和推動技術進步,未經授權訪問系統、網絡或應用程序,可能會導致法律責任或嚴重后果。因此,作者不對讀者基于本文內容所采取的任何行為承擔責任。讀者在…

如何對小型固定翼無人機進行最優的路徑跟隨控制?

控制架構 文章繼續采用的是 ULTRA-Extra無人機&#xff0c;相關參數如下&#xff1a; 這里用于guidance law的無人機運動學模型為&#xff1a; { x ˙ p V a cos ? γ cos ? χ V w cos ? γ w cos ? χ w y ˙ p V a cos ? γ sin ? χ V w cos ? γ w sin ? χ…

【Flink-scala】DataStream編程模型之延遲數據處理

DataStream API編程模型 1.【Flink-Scala】DataStream編程模型之數據源、數據轉換、數據輸出 2.【Flink-scala】DataStream編程模型之 窗口的劃分-時間概念-窗口計算程序 3.【Flink-scala】DataStream編程模型之水位線 4.【Flink-scala】DataStream編程模型之窗口計算-觸發器-…

react useRef、useContext、useReducer使用中遇到的問題及解決辦法

在 React 中&#xff0c;useRef、useContext 和 useReducer 是三個非常有用的 Hook&#xff0c;它們可以幫助我們更好地管理組件的狀態和行為。然而&#xff0c;在使用這些 Hook 時&#xff0c;可能會遇到一些問題和困惑。本文將詳細解釋這三個 Hook 的工作原理&#xff0c;并提…

2024告別培訓班 數通、安全、云計算、云服務、存儲、軟考等1000G資源分享

大類有&#xff1a;軟考初級 軟考中級 軟考高級 華為認證 華三認證&#xff1a; 軟考初級&#xff1a; 信息處理技術員 程序員 網絡管理員 軟考中級&#xff1a; 信息安全工程師 信息系統監理師 信息系統管理工程師 嵌入式系統設計時 數據庫系統工程師 電子商務設…

《操作系統 - 清華大學》8 -1:進程的組成

文章目錄 1. 進程的組成2. 進程與程序的聯系3. 進程與程序的區別4. 進程與程序關系 1. 進程的組成 進程具體包含哪些東西&#xff1a; 首先要執行相應的代碼&#xff0c;所以執行代碼需要放到內存中代碼執行需要處理數據&#xff0c;數據需要放到內存中需要知道現在要執行哪條…

【Java】String類API

創建字符串 字符串字面量"Hello"高效&#xff0c;常量池復用常見、簡單的字符串創建 new 關鍵字new String("Hello")每次創建新對象&#xff0c;性能開銷較高顯式創建新對象 字符數組new String(char[])轉換字符數組字符數組轉字符串 StringBuilder/St…

數據結構初階---二叉樹---堆

一、樹 1.樹的概念 樹是一種非線性的數據結構&#xff0c;由n(n≥0)個有限結點組成的一個有層次關系的集合。形狀類似一棵倒掛的樹&#xff0c;根朝上&#xff0c;分支向下。 根結點沒有前驅結點&#xff0c;可以有n(n≥0)個后繼結點。 其余結點被分為M個互不相交的集合&am…