Spring數(shù)據(jù)庫多數(shù)據(jù)源路由配置過程圖解
項目中需要根據(jù)不同業(yè)務(wù)進(jìn)行分庫,首先是將業(yè)務(wù)不同業(yè)務(wù)映射到不同過的數(shù)據(jù)庫( biz --> db,可能存在多對一情況),
查看springjdbc源碼發(fā)現(xiàn)AbstractRoutingDataSource類作為一個數(shù)據(jù)源路由抽象類,可以擔(dān)當(dāng)這個事情,其設(shè)計思想也比較簡單,
首先將多個數(shù)據(jù)源的映射關(guān)系自己維護(hù)完成后注入進(jìn)來,然后自己定義一個路由規(guī)則,重點部分見代碼:
首先可以看到該類是一個抽象類,重點關(guān)注變量targetDataSource和resolvedDataSources.
其中targetDataSource用于將用戶建立的映射關(guān)系注入進(jìn)來,可以通過如下方法
resolvedDataSources用于真正存儲依賴關(guān)系,targetDataSource僅僅是個中介,解析代碼見下圖
核心路由方法:
是不是很清楚,首先獲取數(shù)據(jù)源映射key,然后通過key獲取數(shù)據(jù)源
數(shù)據(jù)源映射獲取方法為抽象方法,見下圖:
實現(xiàn)時需要注意線程安全,最佳實現(xiàn)時通過ThreadLocal將在dbsql執(zhí)行前將key設(shè)置進(jìn)去,以便后來獲取這個key,
調(diào)用入口:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
