1. 程式人生 > 實用技巧 >springboot 一個註解實現資料庫主從

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