解讀動(dòng)態(tài)數(shù)據(jù)源dynamic-datasource-spring-boot-starter使用問題
dynamic-datasource-spring-boot-starter使用
dynamic-datasource-spring-boot-starter ??是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。
其支持Jdk 1.7+, SpringBoot 1.5.x 和 2.x.x。
特性
- 支持?jǐn)?shù)據(jù)源分組,適用于多種場景 純粹多庫 讀寫分離 一主多從 混合模式。
- 支持?jǐn)?shù)據(jù)庫敏感配置信息加密ENC()。
- 支持每個(gè)數(shù)據(jù)庫獨(dú)立初始化表結(jié)構(gòu)schema和數(shù)據(jù)庫database。
- 支持自定義注解,需繼承DS(3.2.0+)。
- 提供對Druid,Mybatis-Plus,P6sy,Jndi的快速集成。
- 簡化Druid和HikariCp配置,提供全局參數(shù)配置。配置一次,全局通用。
- 提供自定義數(shù)據(jù)源來源方案。
- 提供項(xiàng)目啟動(dòng)后動(dòng)態(tài)增加移除數(shù)據(jù)源方案。
- 提供Mybatis環(huán)境下的純讀寫分離方案。
- 提供使用spel動(dòng)態(tài)參數(shù)解析數(shù)據(jù)源方案。內(nèi)置spel,session,header,支持自定義。
- 支持多層數(shù)據(jù)源嵌套切換。(ServiceA >>> ServiceB >>> ServiceC)。
- 提供對shiro,sharding-jdbc,quartz等第三方庫集成的方案,注意事項(xiàng)和示例。
- 提供**基于seata的分布式事務(wù)方案。**附:不支持原生spring事務(wù)。
- 提供**本地多數(shù)據(jù)源事務(wù)方案。**附:不支持原生spring事務(wù)。
約定
- 本框架只做切換數(shù)據(jù)源這件核心的事情。
- 配置文件所有以下劃線_分割的數(shù)據(jù)源首部即為組的名稱,相同組名稱的數(shù)據(jù)源會(huì)放在一個(gè)組下。
- 切換數(shù)據(jù)源可以是組名,也可以是具體數(shù)據(jù)源名稱。組名則切換時(shí)采用負(fù)載均衡算法切換。
- 默認(rèn)的數(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è)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master strict: false #設(shè)置嚴(yán)格模式,默認(rèn)false不啟動(dòng). 啟動(dòng)后在未匹配到指定數(shù)據(jù)源時(shí)候會(huì)拋出異常,不啟動(dòng)則使用默認(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開始支持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)置加密,使用請查看詳細(xì)文檔 username: ENC(xxxxx) password: ENC(xxxxx) driver-class-name: com.mysql.jdbc.Driver schema: db/schema.sql # 配置則生效,自動(dòng)初始化表結(jié)構(gòu) data: db/data.sql # 配置則生效,自動(dòng)初始化數(shù)據(jù) continue-on-error: true # 默認(rèn)true,初始化失敗是否繼續(xù) separator: ";" # sql默認(rèn)分號分隔符 #......省略 #以上會(huì)配置一個(gè)默認(rèn)庫master,一個(gè)組slave下有兩個(gè)子庫slave_1,slave_2
# 多主多從 純粹多庫(記得設(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可以注解在方法上或類上,同時(shí)存在就近原則 方法上注解 優(yōu)先于 類上注解。
注解 | 結(jié)果 |
---|---|
沒有@DS | 默認(rèn)數(shù)據(jù)源 |
@DS("dsName") | dsName可以為組名也可以為具體某個(gè)庫的名稱 |
@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"); } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Spring實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的方法總結(jié)
- Springboot實(shí)現(xiàn)根據(jù)用戶ID切換動(dòng)態(tài)數(shù)據(jù)源
- 如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎
- Spring AbstractRoutingDatasource 動(dòng)態(tài)數(shù)據(jù)源的實(shí)例講解
- 詳解SpringBoot+Mybatis實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換
- Spring中的動(dòng)態(tài)數(shù)據(jù)源解讀
相關(guān)文章
子線程任務(wù)發(fā)生異常時(shí)主線程事務(wù)回滾示例過程
這篇文章主要為大家介紹了子線程任務(wù)發(fā)生了異常時(shí)主線程事務(wù)如何回滾的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Spring MVC---數(shù)據(jù)綁定和表單標(biāo)簽詳解
本篇文章主要介紹了Spring MVC---數(shù)據(jù)綁定和表單標(biāo)簽詳解,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01Springmvc ajax跨域請求處理方法實(shí)例詳解
這篇文章主要介紹了Springmvc ajax跨域請求處理方法實(shí)例詳解,需要的朋友可以參考下2017-10-10java開源調(diào)度如何給xxljob加k8s執(zhí)行器
這篇文章主要介紹了java開源調(diào)度如何給xxljob加一個(gè)k8s執(zhí)行器,?xxljob?在設(shè)計(jì)上,抽象出了執(zhí)行器的接口,所以實(shí)現(xiàn)一個(gè)語言的執(zhí)行器并不復(fù)雜,這里主要探索下,如何利用k8s的pod?的能力,使用?xxljob?調(diào)度?pod?運(yùn)行,實(shí)現(xiàn)一個(gè)通用的和語言無關(guān)的執(zhí)行器2022-02-02springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫
這篇文章主要介紹了springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07java.lang.IllegalStateException異常解決
異常是程序在執(zhí)行過程中遇到的錯(cuò)誤或異常情況,本文就來介紹一下java.lang.IllegalStateException異常解決,感興趣的可以了解一下2023-11-11