Spring數(shù)據(jù)庫多數(shù)據(jù)源路由配置過程圖解
項(xiàng)目中需要根據(jù)不同業(yè)務(wù)進(jìn)行分庫,首先是將業(yè)務(wù)不同業(yè)務(wù)映射到不同過的數(shù)據(jù)庫( biz --> db,可能存在多對一情況),
查看springjdbc源碼發(fā)現(xiàn)AbstractRoutingDataSource類作為一個(gè)數(shù)據(jù)源路由抽象類,可以擔(dān)當(dāng)這個(gè)事情,其設(shè)計(jì)思想也比較簡單,
首先將多個(gè)數(shù)據(jù)源的映射關(guān)系自己維護(hù)完成后注入進(jìn)來,然后自己定義一個(gè)路由規(guī)則,重點(diǎn)部分見代碼:

首先可以看到該類是一個(gè)抽象類,重點(diǎn)關(guān)注變量targetDataSource和resolvedDataSources.
其中targetDataSource用于將用戶建立的映射關(guān)系注入進(jìn)來,可以通過如下方法

resolvedDataSources用于真正存儲依賴關(guān)系,targetDataSource僅僅是個(gè)中介,解析代碼見下圖

核心路由方法:

是不是很清楚,首先獲取數(shù)據(jù)源映射key,然后通過key獲取數(shù)據(jù)源
數(shù)據(jù)源映射獲取方法為抽象方法,見下圖:

實(shí)現(xiàn)時(shí)需要注意線程安全,最佳實(shí)現(xiàn)時(shí)通過ThreadLocal將在dbsql執(zhí)行前將key設(shè)置進(jìn)去,以便后來獲取這個(gè)key,
調(diào)用入口:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot項(xiàng)目application.yml文件數(shù)據(jù)庫配置密碼加密的方法
- Spring Security使用數(shù)據(jù)庫認(rèn)證及用戶密碼加密和解密功能
- SpringBoot2 整合 ClickHouse數(shù)據(jù)庫案例解析
- SpringBoot配置文件中數(shù)據(jù)庫密碼加密兩種方案(推薦)
- SpringBoot整合Druid數(shù)據(jù)源過程詳解
- springboot 多數(shù)據(jù)源的實(shí)現(xiàn)(最簡單的整合方式)
- SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解
- SpringBoot如何在運(yùn)行時(shí)動態(tài)添加數(shù)據(jù)源
相關(guān)文章
Java通過Socket實(shí)現(xiàn)簡單多人聊天室
這篇文章主要為大家詳細(xì)介紹了Java通過Socket實(shí)現(xiàn)簡單多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn)
時(shí)間輪是一種高效的定時(shí)調(diào)度算法,主要用于管理延時(shí)任務(wù)或周期性任務(wù),它通過一個(gè)環(huán)形數(shù)組(時(shí)間輪)和指針來實(shí)現(xiàn),將大量定時(shí)任務(wù)分?jǐn)偟焦潭ǖ臅r(shí)間槽中,極大地降低了時(shí)間復(fù)雜度和資源開銷,本文給大家介紹了Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn),需要的朋友可以參考下2025-03-03
Spring的UnsatisfiedDependencyException異常的解決
在使用Spring框架開發(fā)應(yīng)用程序時(shí),我們經(jīng)常會遇到各種異常,本文主要介紹了Spring的UnsatisfiedDependencyException異常的解決,感興趣的可以了解一下2023-11-11
SpringBoot整合Jackson超詳細(xì)用法(附Jackson工具類)
這篇文章主要介紹了SpringBoot整合Jackson超詳細(xì)教程,本篇講的是Jackson的詳細(xì)用法,Jackson工具類在文章最后,直接復(fù)制粘貼即可使用,需要的朋友可以參考下2023-03-03

