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

Mybatis plus Dynamic Datasource 動態(tài)數(shù)據(jù)源及使用方式

 更新時間:2025年09月22日 09:38:21   作者:ywz歐卡  
dynamic-datasource-spring-boot-starter是一個基于springboot的快速集成多數(shù)據(jù)源的啟動器,它跟mybatis-plus是一個生態(tài)圈里的,很容易集成mybatis-plus,本文介紹Mybatis plus Dynamic Datasource 動態(tài)數(shù)據(jù)源的相關知識,感興趣的朋友一起看看吧

1 介紹

        dynamic-datasource-spring-boot-starter 是一個基于springboot的快速集成多數(shù)據(jù)源的啟動器。它跟mybatis-plus是一個生態(tài)圈里的,很容易集成mybatis-plus。

1.1 特點

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

1.2 約定

  1. 本框架只做 切換數(shù)據(jù)源 這件核心的事情,并不限制你的具體操作,切換了數(shù)據(jù)源可以做任何CRUD。
  2. 配置文件所有以下劃線 _ 分割的數(shù)據(jù)源 首部 即為組的名稱,相同組名稱的數(shù)據(jù)源會放在一個組下。
  3. 切換數(shù)據(jù)源可以是組名,也可以是具體數(shù)據(jù)源名稱。組名則切換時采用負載均衡算法切換。
  4. 默認的數(shù)據(jù)源名稱為 master ,你可以通過 spring.datasource.dynamic.primary 修改。
  5. 代碼塊里主動切換>方法上的注解優(yōu)>類上注解(就近原則)。
  6. DS支持繼承抽象類上的DS,支持繼承接口上的DS。

2 使用方式

2.1 引入依賴

  • spring-boot 1.5.x 2.x.x
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>${version}</version>
</dependency>
  • spring-boot3及以上
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
    <version>${version}</version>
</dependency>

2.2 配置數(shù)據(jù)源

spring:
  datasource:
    dynamic:
      enabled: true #啟用動態(tài)數(shù)據(jù)源,默認true
      primary: master #設置默認的數(shù)據(jù)源或者數(shù)據(jù)源組,默認值即為master
      strict: false #嚴格匹配數(shù)據(jù)源,默認false. true未匹配到指定數(shù)據(jù)源時拋異常,false使用默認數(shù)據(jù)源
      grace-destroy: false #是否優(yōu)雅關閉數(shù)據(jù)源,默認為false,設置為true時,關閉數(shù)據(jù)源時如果數(shù)據(jù)源中還存在活躍連接,至多等待10s后強制關閉
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0開始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: ENC(xxxxx) # 內置加密,使用請查看詳細文檔
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
        #......省略
        #以上會配置一個默認庫master,一個組slave下有兩個子庫slave_1,slave_2

2.2.1 多主多從

spring:
  datasource:
    dynamic:
      datasource:
        master_1:
        master_2:
        slave_1:
        slave_2:
        slave_3:

2.2.2純粹多庫

spring:
  datasource:
    dynamic:
      datasource:
        mysql:
        oracle:
        sqlserver:
        postgresql:
        h2:

2.2.3混合配置

spring:
  datasource:
    dynamic:
      datasource:
        master:
        slave_1:
        slave_2:
        oracle_1:
        oracle_2:

2.3 使用@DS切換數(shù)據(jù)源

@DS 可以注解在方法上或類上,同時存在就近原則 方法上注解 優(yōu)先于 類上注解。

注解結果
沒有@DS默認數(shù)據(jù)源
@DS("dsName")dsName可以為組名也可以為具體某個庫的名稱
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List selectAll() {
        return jdbcTemplate.queryForList("select * from user");
    }
    @Override
    @DS("slave_1")
    public List selectByCondition() {
        return jdbcTemplate.queryForList("select * from user where age >10");
    }
}

2.4 使用代碼切換數(shù)據(jù)源

        DynamicDataSourceContextHolder 用于動態(tài)切換數(shù)據(jù)源的上下文工具類。在使用多數(shù)據(jù)源的情況下,它可以幫助在運行時選擇要使用的數(shù)據(jù)源。存儲當前線程的數(shù)據(jù)源標識:

// 切換到slave數(shù)據(jù)庫
DynamicDataSourceContextHolder.push("slave");

2.5 添加新的數(shù)據(jù)源

@Resource
private DataSource dataSource;
@Resource
private DefaultDataSourceCreator dataSourceCreator;
public void add(){
    DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
    // 配置數(shù)據(jù)源
    DataSourceProperty dataSourceProperty = new DataSourceProperty();
    dataSourceProperty.setLazy(true);
    dataSourceProperty.setUsername("root");
    dataSourceProperty.setPassword("123456");
    dataSourceProperty.setUrl(url);
    dataSourceProperty.setDriverClassName(driverClassName);
    // 添加數(shù)據(jù)源
    ds.addDataSource(key, dataSourceCreator.createDataSource(dataSourceProperty));
}  

3 使用mybatis創(chuàng)建數(shù)據(jù)庫

        定義mapper

@Mapper
public interface DatabaseMapper {
    @Select("CREATE DATABASE IF NOT EXISTS ${databaseName}")
    void createDatabase( String databaseName);
}

        執(zhí)行代碼:

 // 配置數(shù)據(jù)源
DataSourceProperty dataSourceProperty = new DataSourceProperty();
dataSourceProperty.setLazy(true);
dataSourceProperty.setUsername(username);
dataSourceProperty.setPassword(password);
dataSourceProperty.setUrl(url);
dataSourceProperty.setDriverClassName(driverClassName);
// 創(chuàng)建sqlSessionFactory,配置mapper類
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.addMapper(DatabaseMapper.class);
sqlSessionFactoryBean.setConfiguration(configuration);
        sqlSessionFactoryBean.setDataSource(dataSourceCreator.createDataSource(dataSourceProperty));
// 獲取sqlSession
SqlSession sqlSession = Objects.requireNonNull(sqlSessionFactoryBean.getObject()).openSession();
DatabaseMapper mapper = sqlSession.getMapper(DatabaseMapper.class);
// 初始化數(shù)據(jù)庫,參數(shù)為數(shù)據(jù)庫名注意要使用 `` 包裹起來。
mapper.createDatabase("`databaseName`");

4 使用SpringJDBC運行sql腳本

        使用SQL腳本中定義的外部資源進行初始化或清理數(shù)據(jù)庫。

ResourceDatabasePopulator popular = new ResourceDatabasePopulator();
// xxx.sql 為resource目錄下文件。
popular.addScript(new ClassPathResource("xxx.sql"));
// 傳入數(shù)據(jù)源執(zhí)行sql腳本。
popular.execute(dataSource);

到此這篇關于Mybatis plus Dynamic Datasource 動態(tài)數(shù)據(jù)源及使用方式的文章就介紹到這了,更多相關Mybatis plus動態(tài)數(shù)據(jù)源內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)文件的分割與合并

    Java實現(xiàn)文件的分割與合并

    這篇文章主要為大家詳細介紹了Java實現(xiàn)文件的分割與合并,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java原生序列化和Kryo序列化性能實例對比分析

    java原生序列化和Kryo序列化性能實例對比分析

    這篇文章主要介紹了java原生序列化和Kryo序列化性能實例對比分析,涉及Java和kryo序列化和反序列化相關實例,小編覺得很不錯,這里分享給大家,希望給大家一個參考。
    2017-10-10
  • 關于MapStruct的使用教程

    關于MapStruct的使用教程

    MapStruct 是一個用于 Java Bean 映射的代碼生成器,通過注解處理器自動生成映射代碼,以下是 MapStruct 的基本使用方法:添加依賴、定義映射接口、使用映射方法、定義自定義映射方法、處理復雜映射、集成 Spring 等
    2025-02-02
  • java使用Swagger文檔報錯“java.lang.NullPointerException:null”

    java使用Swagger文檔報錯“java.lang.NullPointerException:null”

    文章描述了一個Java項目中使用Swagger文檔時遇到的問題,每次啟動都報錯,但不影響項目運行,問題原因可能是實體類中@ApiModelProperty有相同的name值或修飾符誤寫,最終通過重寫源碼代碼進行判空處理解決了問題,此經驗僅供參考
    2026-05-05
  • JNI實現(xiàn)Java調用C/C++代碼詳細代碼示例

    JNI實現(xiàn)Java調用C/C++代碼詳細代碼示例

    這篇文章主要介紹了JNI實現(xiàn)Java調用C/C++代碼的相關資料,JNI是Java/Kotlin與C/C++語言之間的交互橋梁,用于調用C/C++代碼以解決高性能問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • 詳細總結Java中常用的原子類

    詳細總結Java中常用的原子類

    今天給大家總結了一下Java常用的原子類,文中有非常詳細的介紹及代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java 整合模板徹底解決ssm配置難題

    Java 整合模板徹底解決ssm配置難題

    SSM框架是spring MVC ,spring和mybatis框架的整合,是標準的MVC模式,將整個系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負責請求的轉發(fā)和視圖管理,spring實現(xiàn)業(yè)務對象管理,mybatis作為數(shù)據(jù)對象的持久化引擎
    2021-10-10
  • SpringSecurity中的Filter Chain(過濾器鏈)

    SpringSecurity中的Filter Chain(過濾器鏈)

    Spring Security的Filter Chain是由一系列過濾器組成的管道,每個過濾器執(zhí)行特定的安全功能,Spring Security能夠提供強大而靈活的安全控制機制,從而保護你的應用程序不受各種網(wǎng)絡安全威脅的侵害,本文介紹SpringSecurity中的Filter Chain,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 給你的MyBatis-Plus裝上批量插入的翅膀(推薦)

    給你的MyBatis-Plus裝上批量插入的翅膀(推薦)

    這篇文章主要介紹了給你的MyBatis-Plus裝上批量插入的翅膀,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot2+JPA之悲觀鎖和樂觀鎖實戰(zhàn)教程

    Spring Boot2+JPA之悲觀鎖和樂觀鎖實戰(zhàn)教程

    這篇文章主要介紹了Spring Boot2+JPA之悲觀鎖和樂觀鎖實戰(zhàn)教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

竹北市| 冀州市| 安顺市| 策勒县| 报价| 木兰县| 宜丰县| 唐河县| 荥经县| 青州市| 双江| 万宁市| 克东县| 长武县| 海阳市| 滕州市| 措勤县| 五常市| 贵港市| 孝昌县| 马尔康县| 台中市| 鄯善县| 丰宁| 山东省| 梁山县| 吴忠市| 涿州市| 望奎县| 乐平市| 西平县| 盘山县| 金华市| 乐东| 东港市| 罗城| 工布江达县| 鄢陵县| 泉州市| 安塞县| 桐城市|