Spring數(shù)據(jù)庫(kù)多數(shù)據(jù)源路由配置過(guò)程圖解
項(xiàng)目中需要根據(jù)不同業(yè)務(wù)進(jìn)行分庫(kù),首先是將業(yè)務(wù)不同業(yè)務(wù)映射到不同過(guò)的數(shù)據(jù)庫(kù)( biz --> db,可能存在多對(duì)一情況),
查看springjdbc源碼發(fā)現(xiàn)AbstractRoutingDataSource類作為一個(gè)數(shù)據(jù)源路由抽象類,可以擔(dān)當(dāng)這個(gè)事情,其設(shè)計(jì)思想也比較簡(jiǎn)單,
首先將多個(gè)數(shù)據(jù)源的映射關(guān)系自己維護(hù)完成后注入進(jìn)來(lái),然后自己定義一個(gè)路由規(guī)則,重點(diǎn)部分見(jiàn)代碼:
首先可以看到該類是一個(gè)抽象類,重點(diǎn)關(guān)注變量targetDataSource和resolvedDataSources.
其中targetDataSource用于將用戶建立的映射關(guān)系注入進(jìn)來(lái),可以通過(guò)如下方法
resolvedDataSources用于真正存儲(chǔ)依賴關(guān)系,targetDataSource僅僅是個(gè)中介,解析代碼見(jiàn)下圖
核心路由方法:
是不是很清楚,首先獲取數(shù)據(jù)源映射key,然后通過(guò)key獲取數(shù)據(jù)源
數(shù)據(jù)源映射獲取方法為抽象方法,見(jiàn)下圖:
實(shí)現(xiàn)時(shí)需要注意線程安全,最佳實(shí)現(xiàn)時(shí)通過(guò)ThreadLocal將在dbsql執(zhí)行前將key設(shè)置進(jìn)去,以便后來(lái)獲取這個(gè)key,
調(diào)用入口:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 使用python tkinter開(kāi)發(fā)一個(gè)爬取B站直播彈幕工具的實(shí)現(xiàn)代碼2. ThinkPHP6使用JWT+中間件實(shí)現(xiàn)Token驗(yàn)證實(shí)例詳解3. python 實(shí)時(shí)調(diào)取攝像頭的示例代碼4. Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考5. Python如何解決secure_filename對(duì)中文不支持問(wèn)題6. Python類成員繼承重寫(xiě)的實(shí)現(xiàn)7. ASP基礎(chǔ)入門(mén)第二篇(ASP基礎(chǔ)知識(shí))8. Python 用NumPy創(chuàng)建二維數(shù)組的案例9. python安裝sklearn模塊的方法詳解10. 不使用XMLHttpRequest對(duì)象實(shí)現(xiàn)Ajax效果的方法小結(jié)
