日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

多數(shù)據(jù)源管理:掌握@DS注解的威力

來(lái)源: 責(zé)編: 時(shí)間:2023-10-31 10:26:08 305觀看
導(dǎo)讀大家在日常后端開(kāi)發(fā)過(guò)程,不可避免的會(huì)接觸到需要用到配置多個(gè)數(shù)據(jù)源的場(chǎng)景,在這里,小編介紹一種簡(jiǎn)單方便的,只需要簡(jiǎn)單的配置和一個(gè)@DS注解就能實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源的方式,這種動(dòng)態(tài)數(shù)據(jù)源底層原理是基于Mybatis-plus來(lái)實(shí)現(xiàn)的。1

大家在日常后端開(kāi)發(fā)過(guò)程,不可避免的會(huì)接觸到需要用到配置多個(gè)數(shù)據(jù)源的場(chǎng)景,在這里,小編介紹一種簡(jiǎn)單方便的,只需要簡(jiǎn)單的配置和一個(gè)@DS注解就能實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源的方式,這種動(dòng)態(tài)數(shù)據(jù)源底層原理是基于Mybatis-plus來(lái)實(shí)現(xiàn)的。dil28資訊網(wǎng)——每日最新資訊28at.com

1、配置方式

首先是pom.xmldil28資訊網(wǎng)——每日最新資訊28at.com

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

隨后配上多數(shù)據(jù)源,我們的項(xiàng)目中分別配置了Mysql和Doris兩種數(shù)據(jù)庫(kù)dil28資訊網(wǎng)——每日最新資訊28at.com

spring:      datasource:            druid:                  localdb:                        url: xxx                        username: xxx                     driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource                  doris:                       url: xxx                        username: xxx                driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource

最后需要使用哪個(gè)數(shù)據(jù)庫(kù),在對(duì)應(yīng)的方法上加上對(duì)應(yīng)的@DS(“數(shù)據(jù)庫(kù)名”)注解就可以了,在類(lèi)上加@DS(“數(shù)據(jù)庫(kù)名”),那么整個(gè)類(lèi)下的所有方法都會(huì)使用到這個(gè)數(shù)據(jù)源,實(shí)現(xiàn)方式是不是非常簡(jiǎn)單。dil28資訊網(wǎng)——每日最新資訊28at.com

@Service@DS("localdb")public class testServiceImpl extends BaseServiceImpl<testMapper, testBean> implements testService {    public void save(String arg1) {       //TODO    }        public void find(String arg2) {       //TODO    }}

1、底層實(shí)現(xiàn)原理

底層實(shí)現(xiàn)核心類(lèi)是
com.baomidou.dynamic.datasource.DynamicRoutingDataSource,繼承自AbstractDataSource
dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

項(xiàng)目在初始化的時(shí)候會(huì)調(diào)用DynamicRoutingDataSource里面的public synchronized void addDataSource(String ds, DataSource dataSource)方法加載數(shù)據(jù)源,數(shù)據(jù)源存進(jìn)dataSourceMap中。dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

隨后,如果進(jìn)行數(shù)據(jù)庫(kù)操作,以方法為最小粒度,執(zhí)行對(duì)應(yīng)方法時(shí),會(huì)被
DynamicDataSourceAnnotationInterceptor攔截器攔截
dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行determineDatasource方法,掃描加了@DS注解的類(lèi)或者方法,隨后調(diào)用DynamicDataSourceContextHolder.poll方法。dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

DynamicDataSourceContextHolder.poll方法將當(dāng)前線程的數(shù)據(jù)源名加到對(duì)應(yīng)的ThreadLocal線程本地中dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

在之后的數(shù)據(jù)操作中,會(huì)調(diào)用org.springframework.jdbc.datasource.getConnection()方法,ThreadLocal中獲取之前攔截器存進(jìn)去動(dòng)態(tài)數(shù)據(jù)源名,如果沒(méi)有獲取到,就默認(rèn)為配置的primary數(shù)據(jù)源,這完成了對(duì)應(yīng)的動(dòng)態(tài)數(shù)據(jù)源切換。dil28資訊網(wǎng)——每日最新資訊28at.com

dil28資訊網(wǎng)——每日最新資訊28at.com

3、總結(jié)

基于Mybatis-plus的@DS注解可以實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換,具有實(shí)現(xiàn)簡(jiǎn)單的優(yōu)點(diǎn),雖然沒(méi)有AOP實(shí)現(xiàn),但是用到了AOP的思想,后續(xù)小編將寫(xiě)一篇基于AOP的實(shí)現(xiàn)方式,歡迎大家關(guān)注。dil28資訊網(wǎng)——每日最新資訊28at.com

作者:京東保險(xiǎn) 郭盼dil28資訊網(wǎng)——每日最新資訊28at.com

來(lái)源:京東云開(kāi)發(fā)者社區(qū) 轉(zhuǎn)載請(qǐng)注明來(lái)源dil28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16017-0.html多數(shù)據(jù)源管理:掌握@DS注解的威力

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在低版本的Spring中實(shí)現(xiàn)自動(dòng)配置功能

下一篇: 線程類(lèi)型詳解之線程優(yōu)化使用技巧

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 白银市| 河北省| 丹江口市| 河东区| 台中县| 包头市| 南通市| 景谷| 崇州市| 遵化市| 临沂市| 吉林市| 灵台县| 陵水| 常熟市| 遂川县| 雷波县| 吴堡县| 松溪县| 来安县| 河南省| 蓬溪县| 宜丰县| 九江县| 高尔夫| 黄梅县| 民权县| 无锡市| 本溪市| 苗栗县| 紫金县| 寻乌县| 锡林郭勒盟| 甘孜县| 峨眉山市| 五寨县| 茶陵县| 花莲县| 宝丰县| 江口县| 台北县|