最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot和MyBatis環(huán)境下實現動態(tài)數據源切換過程

 更新時間:2025年10月11日 09:29:58   作者:Chen不舊  
dynamic-datasource-spring-boot-starter?是一個用于在SpringBoot和MyBatis環(huán)境下實現動態(tài)數據源切換的工具,它簡化了配置和切換邏輯,通過引入依賴,配置數據源和使用@DS注解,可以輕松實現數據源的動態(tài)切換

使用 dynamic-datasource-spring-boot-starter 是在 Spring Boot 和 MyBatis 環(huán)境下實現動態(tài)數據源切換最簡單和高效的方式。

這個 Starter 極大地簡化了配置和切換邏輯,它自身集成了 AbstractRoutingDataSource 的所有邏輯。

使用dynamic-datasource-spring-boot-starter

1. 引入依賴

在您的 Maven 或 Gradle 項目中引入 Starter 依賴。

Maven:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

2. 配置文件(application.yml或application.properties)

您只需在配置文件中定義所有的數據源。Starter 會自動將它們注冊和管理起來。

它約定:

  • spring.datasource.dynamic.primary:指定默認使用的數據源名稱(Key)。
  • spring.datasource.dynamic.datasource:在下面配置您的具體數據源。

application.yml 示例:

spring:
  # 動態(tài)數據源配置
  datasource:
    dynamic:
      # 默認數據源,未指定時將使用這個
      primary: master
      datasource:
        # 主庫配置 (Key: master)
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/db_master?serverTimezone=Asia/Shanghai
          username: root
          password: 123
        
        # 從庫配置 (Key: slave)
        slave:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/db_slave?serverTimezone=Asia/Shanghai
          username: root
          password: 123

3. 實現數據源動態(tài)切換

Starter 提供了 @DS 注解來實現數據源的動態(tài)切換。這個注解可以直接用于 Service 層的方法、Mapper 接口的方法,甚至整個 Mapper 類上。

示例 1: 在 Service 層方法上切換

這是最常見的用法,因為 Service 層更貼近業(yè)務邏輯。

import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    // 默認使用 primary 配置的數據源,即 master
    public User getMasterUser(Long id) {
        // ... 邏輯
    }

    // 明確指定使用 slave 數據源,常用于查詢
    @DS("slave")
    public List<User> getSlaveUsers() {
        // ... 邏輯,此方法執(zhí)行期間會使用 slave 庫
        return userMapper.selectAll();
    }
    
    // 明確指定使用 master 數據源,常用于事務性的更新操作
    @DS("master")
    public void updateMasterUser(User user) {
        // ... 邏輯,此方法執(zhí)行期間會使用 master 庫
        userMapper.update(user);
    }
}

示例 2: 在 Mapper 接口或方法上切換

您也可以直接在 Mapper 接口上指定數據源,但通常不推薦將數據源的決策放在持久層。

import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;

// 整個 Mapper 接口都使用 slave 數據源
@DS("slave")
@Mapper
public interface SlaveUserMapper {
    List<User> selectAll();
    
    // 如果某個方法需要覆蓋類上的配置,可以再次使用 @DS
    @DS("master")
    User selectById(Long id); 
}

額外高級功能

dynamic-datasource-spring-boot-starter 除了基礎的動態(tài)切換外,還提供了一些非常實用的高級功能:

1. 讀寫分離(Load Balance)

該 Starter 原生支持基于的負載均衡。

配置示例:

spring:
  datasource:
    dynamic:
      primary: master-group # 默認使用 master-group
      datasource:
        # 定義一個名為 master-group 的組,它包含一個主庫和兩個從庫
        master-group:
          # 主庫
          master:
            url: ...
          # 從庫 1
          slave1:
            url: ...
          # 從庫 2
          slave2:
            url: ...

使用方式:

  • 寫入操作(默認): 當您使用 @DS("master-group") 進行 寫操作(UPDATE/INSERT/DELETE) 時,會自動連接到組內的 master 庫。
  • 讀取操作(負載均衡): 當您使用 @DS("master-group") 進行 讀操作(SELECT) 時,會在 slave1slave2 之間進行負載均衡(默認是輪詢)。

2. 運行時添加/刪除數據源

該 Starter 提供了 DynamicDataSourceService 接口,允許您在項目運行期間,通過代碼動態(tài)地添加或刪除數據源,這對于多租戶等場景非常有用。

@Autowired
private DynamicDataSourceCreator dynamicDataSourceCreator;

@Autowired
private DynamicDataSource dynamicDataSource;

public void addTenantDataSource(String tenantId, DataSourceProperty dp) {
    // 1. 創(chuàng)建新的數據源(例如使用 Druid 或 Hikari 配置)
    DataSource newDs = dynamicDataSourceCreator.createDataSource(dp);
    
    // 2. 將數據源添加到動態(tài)數據源管理器中
    dynamicDataSource.addDataSource(tenantId, newDs);
}

總之

使用 @DS 注解和簡潔的配置,dynamic-datasource-spring-boot-starter 是解決 MyBatis 動態(tài)數據源問題的最佳實踐。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Netty網絡編程實戰(zhàn)之開發(fā)聊天室功能

    Netty網絡編程實戰(zhàn)之開發(fā)聊天室功能

    這篇文章主要為大家詳細介紹了如何利用Netty實現聊天室功能,文中的示例代碼講解詳細,對我們學習Netty網絡編程有一定幫助,需要的可以參考一下
    2022-10-10
  • Java循環(huán)終止的實現方式總結

    Java循環(huán)終止的實現方式總結

    循環(huán)是一種重復執(zhí)行一段代碼的結構,Java提供了四種主要的循環(huán)結構,本文主要來和大家介紹一下Java循環(huán)終止的實現方式,有需要的小伙伴可以參考一下
    2023-10-10
  • RocketMQ源碼分析之Broker過期消息清理機制

    RocketMQ源碼分析之Broker過期消息清理機制

    這篇文章主要為大家介紹了RocketMQ源碼分析之Broker過期消息清理機制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • java實現將字符串中首字母轉換成大寫,其它全部轉換成小寫的方法示例

    java實現將字符串中首字母轉換成大寫,其它全部轉換成小寫的方法示例

    這篇文章主要介紹了java實現將字符串中首字母轉換成大寫,其它全部轉換成小寫的方法,涉及java字符串遍歷、轉換、拼接等相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • 指定springboot的jar運行內存方式

    指定springboot的jar運行內存方式

    這篇文章主要介紹了指定springboot的jar運行內存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java面向對象之包裝類的用途與實際使用

    Java面向對象之包裝類的用途與實際使用

    所謂包裝類,就是能夠直接將簡單類型的變量表示為一個類,在執(zhí)行變量類型的相互轉換時,我們會大量使用這些包裝類,本文我們來深入探索一下Java包裝類的相關內容,需要的朋友可以參考下
    2022-03-03
  • 老生常談spring boot 1.5.4 日志管理(必看篇)

    老生常談spring boot 1.5.4 日志管理(必看篇)

    下面小編就為大家?guī)硪黄仙U剆pring boot 1.5.4 日志管理(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring Boot Admin郵件警報整合過程解析

    Spring Boot Admin郵件警報整合過程解析

    這篇文章主要介紹了Spring Boot Admin郵件警報整合過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java實現簡易版圖形界面計算器

    java實現簡易版圖形界面計算器

    這篇文章主要為大家詳細介紹了java實現簡易版圖形界面計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 如何自定義一個log適配器starter

    如何自定義一個log適配器starter

    這篇文章主要介紹了如何自定義一個log適配器starter的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06

最新評論

犍为县| 菏泽市| 平凉市| 青海省| 屏东县| 丹棱县| 镇沅| 瓦房店市| 德昌县| 连州市| 宜宾县| 常德市| 闽清县| 中牟县| 铁岭县| 海城市| 买车| 那曲县| 玉门市| 东兰县| 苍梧县| 三穗县| 阿拉善左旗| 馆陶县| 漯河市| 万年县| 德令哈市| 海阳市| 麦盖提县| 谢通门县| 牡丹江市| 陆良县| 景东| 宁南县| 阳朔县| 广南县| 黎城县| 贵阳市| 高阳县| 镇江市| 光山县|