MyBatis-Plus 擴(kuò)展-多數(shù)據(jù)源

2022-03-25 13:47 更新

簡(jiǎn)介

?dynamic-datasource-spring-boot-starter? 是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。

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

文檔

詳細(xì)文檔

特性

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

約定

  • 本框架只做 切換數(shù)據(jù)源 這件核心的事情,并不限制你的具體操作,切換了數(shù)據(jù)源可以做任何?CRUD?。
  • 配置文件所有以下劃線(xiàn) ?_分割的數(shù)據(jù)源 首部 即為組的名稱(chēng),相同組名稱(chēng)的數(shù)據(jù)源會(huì)放在一個(gè)組下。
  • 切換數(shù)據(jù)源可以是組名,也可以是具體數(shù)據(jù)源名稱(chēng)。組名則切換時(shí)采用負(fù)載均衡算法切換。
  • 默認(rèn)的數(shù)據(jù)源名稱(chēng)為 ?master,你可以通過(guò) ?spring.datasource.dynamic.primary? 修改。
  • 方法上的注解優(yōu)先于類(lèi)上注解。
  • ?DS?支持繼承抽象類(lèi)上的?DS?,暫不支持繼承接口上的?DS?。

使用方法

  • 引入?dynamic-datasource-spring-boot-starter?

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

  • 配置數(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:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0開(kāi)始支持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) # 內(nèi)置加密,使用請(qǐng)查看詳細(xì)文檔
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
       #......省略
       #以上會(huì)配置一個(gè)默認(rèn)庫(kù)master,一個(gè)組slave下有兩個(gè)子庫(kù)slave_1,slave_2
# 多主多從                      純粹多庫(kù)(記得設(shè)置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h2:                                   oracle_2:

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

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

 注解  結(jié)果
 沒(méi)有@DS  默認(rèn)數(shù)據(jù)源
 @DS("dsName")  dsName可以為組名也可以為具體某個(gè)庫(kù)的名稱(chēng)

@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");
  }
}


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)