import java.util.Scanner,SpringBoot動態切換數據源-快速集成多數據源的啟動器

 2023-10-21 阅读 33 评论 0

摘要:簡介 dynamic-datasource-spring-boot-starter 是一個基于springboot的快速集成多數據源的啟動器。 其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x。 特性 支持 數據源分組 ,適用于多種場景 純粹多庫 讀寫分離 一主多從 混合模式。支持數據庫敏感配置信息 加密 E

簡介

dynamic-datasource-spring-boot-starter 是一個基于springboot的快速集成多數據源的啟動器。

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

特性

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

約定

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

使用方法

  1. 引入dynamic-datasource-spring-boot-starter。
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${version}</version>
</dependency>
  1. 配置數據源。
spring:datasource:dynamic:primary: master #設置默認的數據源或者數據源組,默認值即為masterstrict: false #嚴格匹配數據源,默認false. true未匹配到指定數據源時拋異常,false使用默認數據源datasource:master:url: jdbc:mysql://xx.xx.xx.xx:3306/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver # 3.2.0開始支持SPI可省略此配置slave_1:url: jdbc:mysql://xx.xx.xx.xx:3307/dynamicusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverslave_2:url: ENC(xxxxx) # 內置加密,使用請查看詳細文檔username: ENC(xxxxx)password: ENC(xxxxx)driver-class-name: com.mysql.jdbc.Driver#......省略#以上會配置一個默認庫master,一個組slave下有兩個子庫slave_1,slave_2
# 多主多從                      純粹多庫(記得設置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:
  1. 使用 @DS 切換數據源。

@DS 可以注解在方法上或類上,同時存在就近原則 方法上注解 優先于 類上注解

注解結果
沒有@DS默認數據源
@DS(“dsName”)dsName可以為組名也可以為具體某個庫的名稱
@Service
@DS("slave")
public class UserServiceImpl implements UserService {@Autowiredprivate 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");}
}

尾聲 - 持續學習

好了,今天就到這兒吧,小伙伴們點贊、收藏、評論,一鍵三連走起呀,我們評論見,評論區告訴我還需要補哪些知識點哈 ~~ 🌹🌹🌹

點贊、收藏、評論,一鍵三連走起呀

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/158141.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息