解讀動態(tài)數(shù)據(jù)源dynamic-datasource-spring-boot-starter使用問題
dynamic-datasource-spring-boot-starter使用
dynamic-datasource-spring-boot-starter ??是一個基于springboot的快速集成多數(shù)據(jù)源的啟動器。
其支持Jdk 1.7+, SpringBoot 1.5.x 和 2.x.x。
特性
- 支持數(shù)據(jù)源分組,適用于多種場景 純粹多庫 讀寫分離 一主多從 混合模式。
- 支持數(shù)據(jù)庫敏感配置信息加密ENC()。
- 支持每個數(shù)據(jù)庫獨立初始化表結構schema和數(shù)據(jù)庫database。
- 支持自定義注解,需繼承DS(3.2.0+)。
- 提供對Druid,Mybatis-Plus,P6sy,Jndi的快速集成。
- 簡化Druid和HikariCp配置,提供全局參數(shù)配置。配置一次,全局通用。
- 提供自定義數(shù)據(jù)源來源方案。
- 提供項目啟動后動態(tài)增加移除數(shù)據(jù)源方案。
- 提供Mybatis環(huán)境下的純讀寫分離方案。
- 提供使用spel動態(tài)參數(shù)解析數(shù)據(jù)源方案。內置spel,session,header,支持自定義。
- 支持多層數(shù)據(jù)源嵌套切換。(ServiceA >>> ServiceB >>> ServiceC)。
- 提供對shiro,sharding-jdbc,quartz等第三方庫集成的方案,注意事項和示例。
- 提供**基于seata的分布式事務方案。**附:不支持原生spring事務。
- 提供**本地多數(shù)據(jù)源事務方案。**附:不支持原生spring事務。
約定
- 本框架只做切換數(shù)據(jù)源這件核心的事情。
- 配置文件所有以下劃線_分割的數(shù)據(jù)源首部即為組的名稱,相同組名稱的數(shù)據(jù)源會放在一個組下。
- 切換數(shù)據(jù)源可以是組名,也可以是具體數(shù)據(jù)源名稱。組名則切換時采用負載均衡算法切換。
- 默認的數(shù)據(jù)源名稱為master,你可以通過spring.datasource.dynamic.primary修改。
- 方法上的注解優(yōu)先于類上注解。
使用方法
引入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ù)據(jù)源或者數(shù)據(jù)源組,默認值即為master
strict: false #設置嚴格模式,默認false不啟動. 啟動后在未匹配到指定數(shù)據(jù)源時候會拋出異常,不啟動則使用默認數(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開始支持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 # 配置則生效,自動初始化數(shù)據(jù)
continue-on-error: true # 默認true,初始化失敗是否繼續(xù)
separator: ";" # sql默認分號分隔符
#......省略
#以上會配置一個默認庫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:
使用**@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");
}
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mybatis參數(shù)String與Integer類型的判斷方式
這篇文章主要介紹了mybatis參數(shù)String與Integer類型的判斷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
詳解分別用Kotlin和java寫RecyclerView的示例
本篇文章主要介紹了詳解分別用Kotlin和java寫RecyclerView的示例,詳解分別用Kotlin和java寫RecyclerView的示例2017-12-12
spring-boot @Component和@Bean的區(qū)別詳解
這篇文章主要介紹了spring-boot @Component和@Bean的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
springboot @JsonSerialize的使用講解
這篇文章主要介紹了springboot @JsonSerialize的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Mybatis中resultMap標簽和sql標簽的設置方式
這篇文章主要介紹了Mybatis中resultMap標簽和sql標簽的設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java?基于Hutool實現(xiàn)DES加解密示例詳解
這篇文章主要介紹了Java基于Hutool實現(xiàn)DES加解密,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08

