springboot 一個注解實現數據庫主從


使用方法

特性

  1. 支持 數據源分組 ,適用於多種場景 純粹多庫 讀寫分離 一主多從 混合模式。
  2. 支持數據庫敏感配置信息 加密 ENC()。
  3. 支持每個數據庫獨立初始化表結構schema和數據庫database。
  4. 支持 自定義注解 ,需繼承DS(3.2.0+)。
  5. 提供對Druid,Mybatis-Plus,P6sy,Jndi的快速集成。
  6. 簡化Druid和HikariCp配置,提供 全局參數配置 。配置一次,全局通用。
  7. 提供 自定義數據源來源 方案。
  8. 提供項目啟動后 動態增加移除數據源 方案。
  9. 提供Mybatis環境下的 純讀寫分離 方案。
  10. 提供使用 spel動態參數 解析數據源方案。內置spel,session,header,支持自定義。
  11. 支持 多層數據源嵌套切換 。(ServiceA >>> ServiceB >>> ServiceC)。
  12. 提供對shiro,sharding-jdbc,quartz等第三方庫集成的方案,注意事項和示例。
  13. 提供 基於seata的分布式事務方案。 附:不支持原生spring事務。
  14. 提供 本地多數據源事務方案。 附:不支持原生spring事務。

約定

  1. 本框架只做 切換數據源 這件核心的事情,並不限制你的具體操作,切換了數據源可以做任何CRUD。
  2. 配置文件所有以下划線 _ 分割的數據源 首部 即為組的名稱,相同組名稱的數據源會放在一個組下。
  3. 切換數據源可以是組名,也可以是具體數據源名稱。組名則切換時采用負載均衡算法切換。
  4. 默認的數據源名稱為 master ,你可以通過 spring.datasource.dynamic.primary 修改。
  5. 方法上的注解優先於類上注解。
  6. 強烈建議只在service的類和方法上添加注解,不建議在mapper上添加注解。

引入dynamic-datasource-spring-boot-starter。

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

配置數據源

spring:
  datasource:
    dynamic:
      primary: master #設置默認的數據源或者數據源組,默認值即為master
      strict: false #設置嚴格模式,默認false不啟動. 啟動后在未匹配到指定數據源時候會拋出異常,不啟動則使用默認數據源.
      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
          schema: db/schema.sql # 配置則生效,自動初始化表結構
          data: db/data.sql # 配置則生效,自動初始化數據
          continue-on-error: true # 默認true,初始化失敗是否繼續
          separator: ";" # sql默認分號分隔符
          
       #......省略
       #以上會配置一個默認庫master,一個組slave下有兩個子庫slave_1,slave_2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM