欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot 雙數(shù)據(jù)源配置及實(shí)現(xiàn)原理

 更新時(shí)間:2025年07月22日 11:16:21   作者:一口酥Hac  
雙數(shù)據(jù)源指應(yīng)用同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù),實(shí)現(xiàn)業(yè)務(wù)分離、性能優(yōu)化及數(shù)據(jù)安全,Spring通過AbstractRoutingDataSource動(dòng)態(tài)切換數(shù)據(jù)源,結(jié)合AOP設(shè)置鍵值,需注意@Transactional無法跨數(shù)據(jù)源,建議使用分布式事務(wù)框架,本文給大家介紹Spring Boot雙數(shù)據(jù)源配置,感興趣的朋友一起看看吧

Spring Boot配置和使用兩個(gè)數(shù)據(jù)源的實(shí)現(xiàn)步驟

什么是雙數(shù)據(jù)源?

雙數(shù)據(jù)源是指在一個(gè)應(yīng)用程序中同時(shí)配置和使用兩個(gè)不同的數(shù)據(jù)庫(kù)連接。比如:

  • 一個(gè)連接訂單數(shù)據(jù)庫(kù),處理業(yè)務(wù)數(shù)據(jù)
  • 一個(gè)連接用戶中心數(shù)據(jù)庫(kù),處理用戶信息

這樣的架構(gòu)設(shè)計(jì)可以實(shí)現(xiàn)數(shù)據(jù)隔離、業(yè)務(wù)分離,提升系統(tǒng)的可維護(hù)性和擴(kuò)展性。

實(shí)現(xiàn)原理基于 AbstractRoutingDataSource 動(dòng)態(tài)切換。

為什么需要雙數(shù)據(jù)源?

1. 業(yè)務(wù)分離
不同的業(yè)務(wù)模塊使用獨(dú)立的數(shù)據(jù)庫(kù),職責(zé)更加明確:

訂單系統(tǒng) → 訂單數(shù)據(jù)庫(kù)(存儲(chǔ)訂單、商品、支付信息)
用戶系統(tǒng) → 用戶數(shù)據(jù)庫(kù)(存儲(chǔ)用戶、權(quán)限、組織信息)

2. 性能優(yōu)化

  • 分散數(shù)據(jù)庫(kù)負(fù)載,避免單點(diǎn)壓力
  • 可以針對(duì)不同業(yè)務(wù)特點(diǎn)優(yōu)化數(shù)據(jù)庫(kù)配置

3. 數(shù)據(jù)安全

  • 敏感數(shù)據(jù)隔離存儲(chǔ)
  • 不同數(shù)據(jù)源可以設(shè)置不同的訪問權(quán)限

核心實(shí)現(xiàn)原理

雙數(shù)據(jù)源的核心是 Spring 的 AbstractRoutingDataSource(用于動(dòng)態(tài)切換數(shù)據(jù)源),它可以根據(jù)某個(gè)鍵值動(dòng)態(tài)選擇不同的數(shù)據(jù)源:

Spring 每次訪問數(shù)據(jù)庫(kù)前,都會(huì)先執(zhí)行 determineCurrentLookupKey方法 來判斷用哪個(gè)數(shù)據(jù)源。我們通過 AOP 切面,在執(zhí)行方法前設(shè)置好對(duì)應(yīng)的數(shù)據(jù)源,就能實(shí)現(xiàn)動(dòng)態(tài)切換。

配置好雙數(shù)據(jù)源后,訪問另一個(gè)數(shù)據(jù)庫(kù)的方式和訪問本地?cái)?shù)據(jù)庫(kù)幾乎一樣,開發(fā)時(shí)感知不到差異。

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        // 返回當(dāng)前線程需要使用的數(shù)據(jù)源標(biāo)識(shí)
        return DataSourceContextHolder.getDataSourceType();
    }
}

完整示例

https://github.com/yikousu/DataSwitch

注意

普通的 @Transactional 注解無法跨數(shù)據(jù)源生效!

解決方案:

  • 推薦:同一業(yè)務(wù)盡量只操作一個(gè)數(shù)據(jù)源

  • 如必須跨庫(kù):考慮使用分布式事務(wù)框架

到此這篇關(guān)于Spring Boot 雙數(shù)據(jù)源配置的文章就介紹到這了,更多相關(guān)Spring Boot 雙數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Volatile關(guān)鍵字你真的了解嗎

    Java Volatile關(guān)鍵字你真的了解嗎

    這篇文章主要為大家介紹了Java Volatile關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Java代理模式(Proxy)實(shí)現(xiàn)方法詳解

    Java代理模式(Proxy)實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java代理模式(Proxy)實(shí)現(xiàn)的相關(guān)資料,代理模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,通過引入代理對(duì)象來控制對(duì)目標(biāo)對(duì)象的訪問,代理模式的優(yōu)點(diǎn)包括職責(zé)清晰、擴(kuò)展性好、保護(hù)目標(biāo)對(duì)象和增強(qiáng)功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Java?CAS與Atomic原子操作核心原理詳解

    Java?CAS與Atomic原子操作核心原理詳解

    CAS(Compare?and?Swap)和Atomic原子操作是保證多線程并發(fā)安全的常用機(jī)制,能夠高效地實(shí)現(xiàn)對(duì)共享變量的安全訪問和修改,避免線程競(jìng)爭(zhēng)導(dǎo)致的數(shù)據(jù)不一致和死鎖等問題。它們的應(yīng)用可以提高程序的并發(fā)性能和可維護(hù)性,是多線程編程中的重要工具
    2023-04-04
  • dubbo3 filter(過濾器)如何自定義過濾器

    dubbo3 filter(過濾器)如何自定義過濾器

    dubbo3filter(過濾器)類似于javaweb中的filter和springmvc中的intercaptor,用于在請(qǐng)求發(fā)送前或到達(dá)前進(jìn)行預(yù)處理工作,完成限流和監(jiān)控,在dubbo中,過濾器運(yùn)行在consumer和provider兩端,分別在調(diào)用鏈中執(zhí)行
    2025-03-03
  • 面試官:詳細(xì)談?wù)凧ava對(duì)象的4種引用方式

    面試官:詳細(xì)談?wù)凧ava對(duì)象的4種引用方式

    這篇文章主要給大家介紹了java面試官常會(huì)問到的,關(guān)于Java對(duì)象的4種引用方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法

    SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MyBatis標(biāo)簽之Select?resultType和resultMap詳解

    MyBatis標(biāo)簽之Select?resultType和resultMap詳解

    這篇文章主要介紹了MyBatis標(biāo)簽之Select?resultType和resultMap,在MyBatis中有一個(gè)ResultMap標(biāo)簽,它是為了映射select標(biāo)簽查詢出來的結(jié)果集,下面使用一個(gè)簡(jiǎn)單的例子,來介紹 resultMap 的使用方法,需要的朋友可以參考下
    2022-09-09
  • SpringSecurity?表單登錄的實(shí)現(xiàn)

    SpringSecurity?表單登錄的實(shí)現(xiàn)

    本文主要介紹了SpringSecurity?表單登錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Geotools實(shí)現(xiàn)shape文件的寫入功能

    Geotools實(shí)現(xiàn)shape文件的寫入功能

    Geotools作為開源的Java?GIS三方庫(kù),已經(jīng)成為GIS服務(wù)器端的主流開源庫(kù),其功能非常強(qiáng)大,涉及到GIS業(yè)務(wù)的方方面面,其中就包括GIS數(shù)據(jù)的讀寫,今天小編就借助Geotools來實(shí)現(xiàn)shape數(shù)據(jù)的寫入,需要的朋友可以參考下
    2023-08-08
  • javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論