Spring Boot 雙數(shù)據(jù)源配置及實(shí)現(xiàn)原理
Spring Boot配置和使用兩個(gè)數(shù)據(jù)源的實(shí)現(xiàn)步驟
什么是雙數(shù)據(jù)源?
雙數(shù)據(jù)源是指在一個(gè)應(yīng)用程序中同時(shí)配置和使用兩個(gè)不同的數(shù)據(jù)庫連接。比如:
- 一個(gè)連接訂單數(shù)據(jù)庫,處理業(yè)務(wù)數(shù)據(jù)
- 一個(gè)連接用戶中心數(shù)據(jù)庫,處理用戶信息
這樣的架構(gòu)設(shè)計(jì)可以實(shí)現(xiàn)數(shù)據(jù)隔離、業(yè)務(wù)分離,提升系統(tǒng)的可維護(hù)性和擴(kuò)展性。
實(shí)現(xiàn)原理基于 AbstractRoutingDataSource 動態(tài)切換。
為什么需要雙數(shù)據(jù)源?
1. 業(yè)務(wù)分離
不同的業(yè)務(wù)模塊使用獨(dú)立的數(shù)據(jù)庫,職責(zé)更加明確:
訂單系統(tǒng) → 訂單數(shù)據(jù)庫(存儲訂單、商品、支付信息) 用戶系統(tǒng) → 用戶數(shù)據(jù)庫(存儲用戶、權(quán)限、組織信息)
2. 性能優(yōu)化
- 分散數(shù)據(jù)庫負(fù)載,避免單點(diǎn)壓力
- 可以針對不同業(yè)務(wù)特點(diǎn)優(yōu)化數(shù)據(jù)庫配置
3. 數(shù)據(jù)安全
- 敏感數(shù)據(jù)隔離存儲
- 不同數(shù)據(jù)源可以設(shè)置不同的訪問權(quán)限
核心實(shí)現(xiàn)原理
雙數(shù)據(jù)源的核心是 Spring 的 AbstractRoutingDataSource(用于動態(tài)切換數(shù)據(jù)源),它可以根據(jù)某個(gè)鍵值動態(tài)選擇不同的數(shù)據(jù)源:
Spring 每次訪問數(shù)據(jù)庫前,都會先執(zhí)行 determineCurrentLookupKey方法 來判斷用哪個(gè)數(shù)據(jù)源。我們通過 AOP 切面,在執(zhí)行方法前設(shè)置好對應(yīng)的數(shù)據(jù)源,就能實(shí)現(xiàn)動態(tài)切換。
配置好雙數(shù)據(jù)源后,訪問另一個(gè)數(shù)據(jù)庫的方式和訪問本地?cái)?shù)據(jù)庫幾乎一樣,開發(fā)時(shí)感知不到差異。
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 返回當(dāng)前線程需要使用的數(shù)據(jù)源標(biāo)識
return DataSourceContextHolder.getDataSourceType();
}
}完整示例
https://github.com/yikousu/DataSwitch
注意
普通的 @Transactional 注解無法跨數(shù)據(jù)源生效!
解決方案:
推薦:同一業(yè)務(wù)盡量只操作一個(gè)數(shù)據(jù)源
如必須跨庫:考慮使用分布式事務(wù)框架
到此這篇關(guān)于Spring Boot 雙數(shù)據(jù)源配置的文章就介紹到這了,更多相關(guān)Spring Boot 雙數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot 中 inputStream 神秘消失之謎(終破)
這篇文章主要介紹了springboot 中 inputStream 神秘消失之謎,為了能夠把這個(gè)問題說明,我們首先需要從簡單的http調(diào)用說起,通過設(shè)置body等一些操作,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-08-08
SpringBoot3 RestTemplate配置與使用詳解
本文詳細(xì)介紹了在 SpringBoot 3.x 中如何配置和使用 RestTemplate,包括基本配置、高級配置以及各種使用場景,感興趣的朋友跟隨小編一起看看吧2024-12-12
解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問題(總結(jié)最有效8種解決方案)
這篇文章主要介紹了解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問題,本文通過圖文詳解給大家總結(jié)了最有效的8種解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
基于Spire.Doc for Java實(shí)現(xiàn)HTML轉(zhuǎn)PDF的操作方案
本文記錄了使用Spire.DocforJava將HTML內(nèi)容轉(zhuǎn)換為PDF文檔的過程,包括環(huán)境準(zhǔn)備、兩種常見的轉(zhuǎn)換場景、進(jìn)階設(shè)置以及注意事項(xiàng),適用于樣式復(fù)雜度相對可控、排版以文檔流為主的轉(zhuǎn)換需求,需要的朋友可以參考下2026-04-04

