SpringBoot+mybatis-plus實(shí)現(xiàn)多數(shù)據(jù)源配置(開箱即用)
一、前言
環(huán)境說明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
正常情況下我們在開發(fā)系統(tǒng)的時(shí)候都是使用一個(gè)數(shù)據(jù)源,但是由于有些項(xiàng)目同步數(shù)據(jù)的時(shí)候不想造成數(shù)據(jù)庫io消耗壓力過大,便會(huì)一個(gè)項(xiàng)目對應(yīng)多個(gè)數(shù)據(jù)源,即就會(huì)有個(gè)問題,Springboot配置db都是默認(rèn)加載數(shù)據(jù)源連接,連接池默認(rèn)配置,但是配置多個(gè)數(shù)據(jù)庫url,這該怎么實(shí)現(xiàn)呢?
不用擔(dān)心,我們就是為了解決而寫的,不用復(fù)雜的實(shí)現(xiàn)方式,什么Springboot+mybatis在配置文件中配置多個(gè)數(shù)據(jù)源,然后mapper指定連接配置等,不,不需要,我嫌太麻煩了,今天我就要給你們安利它:**dynamic-datasource-spring-boot-starter,一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器,開箱即用,超級方便。**接下來我就為大家一一講解,雖然配置很簡單,但是坑也比較多,bug菌都為大家給淌過啦,你們就直接直接拿去用即可!
二、dynamic-datasource-spring-boot-starter
一、簡介
dynamic-datasource-spring-boot-starter 是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。
其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x。
二、特性
- 支持 數(shù)據(jù)源分組 ,適用于多種場景 純粹多庫 讀寫分離 一主多從 混合模式。
- 支持?jǐn)?shù)據(jù)庫敏感配置信息 加密 ENC()。
- 支持每個(gè)數(shù)據(jù)庫獨(dú)立初始化表結(jié)構(gòu)schema和數(shù)據(jù)庫database。
- 支持無數(shù)據(jù)源啟動(dòng),支持懶加載數(shù)據(jù)源(需要的時(shí)候再創(chuàng)建連接)。
- 支持 自定義注解 ,需繼承DS(3.2.0+)。
- 提供并簡化對Druid,HikariCp,BeeCp,Dbcp2的快速集成。
- 提供對Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等組件的集成方案。
- 提供 自定義數(shù)據(jù)源來源 方案(如全從數(shù)據(jù)庫加載)。
- 提供項(xiàng)目啟動(dòng)后 動(dòng)態(tài)增加移除數(shù)據(jù)源 方案。
- 提供Mybatis環(huán)境下的 純讀寫分離 方案。
- 提供使用 spel動(dòng)態(tài)參數(shù) 解析數(shù)據(jù)源方案。內(nèi)置spel,session,header,支持自定義。
- 支持 多層數(shù)據(jù)源嵌套切換 。(ServiceA >>> ServiceB >>> ServiceC)。
- 提供 **基于seata的分布式事務(wù)方案。
- 提供 本地多數(shù)據(jù)源事務(wù)方案。
三、使用方法
1、老規(guī)矩,先引依賴包。引入dynamic-datasource-spring-boot-starter;
<!--配置多數(shù)據(jù)源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>2、配置數(shù)據(jù)源。
spring:
datasource:
dynamic:
primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
strict: false #嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false. true未匹配到指定數(shù)據(jù)源時(shí)拋異常,false使用默認(rèn)數(shù)據(jù)源
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-8
username: root
password: 123456
slave_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=utf8
username: root
password: 123456拓展:同時(shí)也支持多主多從,多種不同庫及混合配置。

3、實(shí)戰(zhàn)演示:
我們先來指定配置環(huán)境:

配置好配置環(huán)境后,先啟動(dòng)下項(xiàng)目,查看庫是否都正常連接。如下控制臺(tái)啟動(dòng)打印的日志,表示兩庫都正常連接。

接著,我們先創(chuàng)建兩個(gè)實(shí)體,分別對應(yīng)db1和db2的user表:


接著寫一個(gè)controller類;

接著接口實(shí)現(xiàn)層:

這里我就為大家講解一下了。
數(shù)據(jù)源切換,使用的是提供的**@DS**注解。
其中@DS 可以注解在方法上或類上,同時(shí)存在就近原則 方法上注解 優(yōu)先于 類上注解。(所以你們看上邊,注解在類上使用的是主庫,但是基于下邊某個(gè)方法就是制定了從庫,但是我這樣放一起是為了給大家看比較,一般會(huì)直接分類寫,不會(huì)一個(gè)類上出現(xiàn)多個(gè)數(shù)據(jù)源。)
注:@DS(“dsName”) dsName可以為組名也可以為具體某個(gè)庫的名稱。
4、訪問接口查看結(jié)果。
先是訪問接口1:localhost:8888/dbUser/query-users-for-db-one
如下請求結(jié)果,大家請看,成功拿到了db1庫中的數(shù)據(jù)。

再請求下接口2:localhost:8888/dbUser/query-users-for-db-two
如下請求結(jié)果,大家請看,成功拿到了db2庫中的數(shù)據(jù)。

再做個(gè)測試,我們把db1與db2中的數(shù)據(jù)同時(shí)返回,看看能否成功:
我們先寫兩接口,然后分別將數(shù)據(jù)用map返回:

請求結(jié)果如下:

然后給大家看下數(shù)據(jù)庫數(shù)據(jù),以免被大家說是同一個(gè)庫中的數(shù)據(jù)。


好啦,以上就是同mysql數(shù)據(jù)源的配置流程及實(shí)例演示啦,如果還有啥不清楚的小伙伴,歡迎下方留言。接著就是針對后邊兩種配置方式,就自行嘗試?yán)?,看上去都是一樣的?/p>
有需求的小伙伴,看完之后,使用起來是不是很簡單,壓根不需要用傳統(tǒng)的mybatis配置多個(gè)連接器,mybatis-plus都幫我們封裝好啦,開箱即用。
到此這篇關(guān)于SpringBoot+mybatis-plus實(shí)現(xiàn)多數(shù)據(jù)源配置(開箱即用)的文章就介紹到這了,更多相關(guān)springboot mybatisplus多數(shù)據(jù)源配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot Controller接收參數(shù)的幾種常用方式
這篇文章主要介紹了詳解SpringBoot Controller接收參數(shù)的幾種常用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
java中JsonObject與JsonArray轉(zhuǎn)換方法實(shí)例
在項(xiàng)目日常開發(fā)中常常會(huì)遇到JSONArray和JSONObject的轉(zhuǎn)換,很多公司剛?cè)肼毜男∶刃聲?huì)卡在這里,下面這篇文章主要給大家介紹了關(guān)于java中JsonObject與JsonArray轉(zhuǎn)換方法的相關(guān)資料,需要的朋友可以參考下2023-04-04
Java Spring中Quartz調(diào)度器詳解及實(shí)例
這篇文章主要介紹了Java Spring中Quartz調(diào)度器詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02
TreeSet詳解和使用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
TreeSet是一個(gè)有序的集合,它的作用是提供有序的Set集合。這篇文章主要介紹了TreeSet使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實(shí)例鎖和全局鎖2014-01-01
Java IO文件過濾器對命令設(shè)計(jì)模式的使用
java io流里面使用到了很多的設(shè)計(jì)模式,最典型的就是裝飾模式,還有命令模式,下面分兩部分來講Java IO文件過濾器對命令設(shè)計(jì)模式的使用,一起看看吧2017-06-06
實(shí)戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之設(shè)置微服務(wù)接口開發(fā)模塊
這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之接口開發(fā)醫(yī)院設(shè)置微服務(wù)模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

