spring 數據庫多數據源路由

項目中須要根據不一樣業務進行分庫,首先是將業務不一樣業務映射到不一樣過的數據庫( biz --> db,可能存在多對一狀況),spring

查看springjdbc源碼發現AbstractRoutingDataSource類做爲一個數據源路由抽象類,能夠擔當這個事情,其設計思想也比較簡單,sql

首先將多個數據源的映射關係本身維護完成後注入進來,而後本身定義一個路由規則,重點部分見代碼:數據庫

首先能夠看到該類是一個抽象類,重點關注變量targetDataSource和resolvedDataSources.安全

其中targetDataSource用於將用戶創建的映射關係注入進來,能夠經過以下方法線程

resolvedDataSources用於真正存儲依賴關係,targetDataSource僅僅是個中介,解析代碼見下圖設計

核心路由方法:3d

是否是很清楚,首先獲取數據源映射key,而後經過key獲取數據源blog

數據源映射獲取方法爲抽象方法,見下圖:路由

實現時須要注意線程安全,最佳實現時經過ThreadLocal將在dbsql執行前將key設置進去,以便後來獲取這個key,get

調用入口:

相關文章
相關標籤/搜索