成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring進階:三步搞定MybatisPlus多數(shù)據(jù)源,詳細配置及原理解析

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

前言

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

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

使用方法

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

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

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

spring:
datasource:
dynamic:
primary: master #默認主庫名為master
strict: false #不使用嚴格模式
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

主庫默認為master,從庫命名的格式默認以_分割。

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

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

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

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

原理探究

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2025-02-05 09:17:40

2020-12-31 07:55:33

spring bootMybatis數(shù)據(jù)庫

2024-10-30 10:22:17

2023-09-07 08:39:39

copy屬性數(shù)據(jù)源

2020-11-24 09:56:12

數(shù)據(jù)源讀寫分離

2020-11-04 00:00:29

Kerberos協(xié)議身份

2023-11-16 09:01:37

Hadoop數(shù)據(jù)庫

2009-11-05 10:01:26

Visual Stud

2009-08-14 10:26:27

ibatis多數(shù)據(jù)源

2022-05-18 12:04:19

Mybatis數(shù)據(jù)源Spring

2023-01-04 09:33:31

SpringBootMybatis

2025-05-26 01:33:00

2025-02-19 07:53:19

2021-09-04 23:27:58

Axios源碼流程

2020-11-02 10:51:17

Express源碼Web

2025-04-08 03:00:00

SpringDocker容器

2022-12-19 07:21:35

Hutool-db數(shù)據(jù)庫JDBC

2023-11-27 07:33:55

2009-06-15 13:24:46

JBoss數(shù)據(jù)源

2010-12-27 09:59:11

ODBC數(shù)據(jù)源
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色一级毛片免费看 | 久久综合入口 | 亚洲人成免费 | 久久精品中文 | 久久午夜视频 | 亚洲乱码一区二区三区在线观看 | www日本在线观看 | 久久久久无码国产精品一区 | 亚洲欧美激情视频 | 天天久久 | 91视频播放| 国产在线观看一区二区 | 久久久久国产一区二区三区 | 国产成人精品一区二区三区四区 | 中文字幕精品一区二区三区精品 | 国产精品美女在线观看 | 国产成人久久精品一区二区三区 | 夜夜干夜夜操 | 欧美性tv | 久久精品无码一区二区三区 | 在线免费视频一区 | 国产精品久久久久久久久久久久冷 | 欧美一区二区三区久久精品视 | 国产精品国产三级国产aⅴ原创 | 成人欧美一区二区三区白人 | cao在线 | 天天成人综合网 | 精品国产99 | 中文字幕 国产 | 久久国内精品 | 久久国产成人 | 成人在线免费观看 | 久久久免费观看视频 | 国产成人91视频 | 午夜影院黄 | 欧美福利视频 | 天天操网 | 日韩视频免费 | 成人在线激情 | 中文字幕av在线 | 欧美999 |