日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Spring進(jìn)階:三步搞定MybatisPlus多數(shù)據(jù)源,詳細(xì)配置及原理解析

前言

MybatisPlus(MP)作為mybatis的增強(qiáng)工具,提供了配置多數(shù)據(jù)源的擴(kuò)展,通過簡單的幾步配置,即可使用注解輕松切換數(shù)據(jù)源。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括尼木網(wǎng)站建設(shè)、尼木網(wǎng)站制作、尼木網(wǎng)頁制作以及尼木網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尼木網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到尼木省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

以下是dynamic-datasource提供的功能列表:

使用方法

1、引入
dynamic-datasource-spring-boot-starter。


com.baomidou
dynamic-datasource-spring-boot-starter
${version}

2、配置多數(shù)據(jù)源。

spring:
datasource:
dynamic:
primary: master #默認(rèn)主庫名為master
strict: false #不使用嚴(yán)格模式
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/master
username: root
password: 66668888
driver-class-name: com.mysql.jdbc.Driver
slave_1:
url: jdbc:mysql://127.0.0.1:3307/slave_1
username: root
password: 66668888
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: ENC(xxxxx) # 內(nèi)置加密
username: ENC(xxxxx)
password: ENC(xxxxx)
driver-class-name: com.mysql.jdbc.Driver

主庫默認(rèn)為master,從庫命名的格式默認(rèn)以_分割。

3、在方法或者類上使用@DS切換數(shù)據(jù)源

?DS注解既可以寫在類上,也可以寫在方法上,方法上的優(yōu)先級(jí)高于類。

如果沒有指定DS的屬性值或者沒有使用DS注解,就自動(dòng)走master主庫。

通過以上3步,就可以輕松使用MP切換多數(shù)據(jù)源的能力了。當(dāng)然,除了支持主從模式,還支持多主多從、多庫,混合模式。

原理探究

打開dynamic-datasource-spring-boot-starter.jar包,在spring.factories文件中,可以看到配置了DynamicDataSourceAutoConfiguration啟動(dòng)類。

打開DynamicDataSourceAutoConfiguration類,可以看到通過@AutoConfigureBefore注解,提前初始化了MP自己的DataSource數(shù)據(jù)源。

而DataSourceAutoConfiguration類的核心作用就是初始化DataSrouce,MP通過搶先配置的方式,使DataSource變成了自己指定的數(shù)據(jù)源。

除了初始化MP自己的數(shù)據(jù)源,DynamicDataSourceAutoConfiguration類還做了一些其他的初始化工作,比如DynamicDataSourceProperties配置,初始化DS注解的切面Advisor等。

初始化工作做完以后,接下來就是根據(jù)DS注解判斷走哪個(gè)數(shù)據(jù)源了。

DynamicDataSourceAnnotationInterceptor類是一個(gè)方法攔截器,它的invoke里面有判斷DS key的操作。

在determineDatasourceKey方法中,會(huì)調(diào)用提前注入的DataSourceClassResolver類的findKey方法,判斷類或者方法上是否指定了DS注解。

在這個(gè)方法中,MP會(huì)將方法的判斷結(jié)果緩存下來,下次執(zhí)行相同的類方法就可以直接緩存,從而大大提升查找效率。

獲取到dsKey以后,會(huì)將其設(shè)置在DynamicDataSourceContextHolder中的LOOKUP_KEY_HOLDER中,它是一個(gè)泛型為Deque的ThreadLocal,為什么設(shè)置成棧呢?官方給出的解釋是:

接下來就是獲取數(shù)據(jù)庫鏈接的AbstractRoutingDataSource類的getConnection方法,

而determineDataSource方法就會(huì)去獲取指定的數(shù)據(jù)源,

這里的邏輯是:如果沒有指定DS,就走主庫,如果指定了DS,就根據(jù)DS的屬性值進(jìn)行條件匹配,看走哪個(gè)判斷分支。

獲取到connection鏈接之后,接下來就是執(zhí)行真正的數(shù)據(jù)庫語句了。

以上就是一個(gè)常見的數(shù)據(jù)庫操作的流程,大體思路就是先找MP的啟動(dòng)類,看看啟動(dòng)類都做了哪些工作,之后再按照找數(shù)據(jù)源,找鏈接的思路,看MP是如何具體實(shí)現(xiàn)多數(shù)據(jù)源切換的操作的。

當(dāng)然,MP多數(shù)據(jù)源還有其他的功能點(diǎn),但整體來說,代碼邏輯并不是很復(fù)雜,大家可以通過debug對(duì)源碼進(jìn)行梳理。


新聞名稱:Spring進(jìn)階:三步搞定MybatisPlus多數(shù)據(jù)源,詳細(xì)配置及原理解析
本文鏈接:http://m.5511xx.com/article/djgihie.html