基於Spring的Web專案執行時切換資料來源的一種解決方案
場景需求
需要對於一些請求在執行時訪問不同的資料庫,並且各個請求是獨立的互不影響的。
解決方案
- 首先在配置中定義多個資料來源,併為每個資料來源指定id
- 用一個列舉類定義多個資料來源id對應的常量值
- 用ThreadLocal來為每一個請求儲存當前使用的資料來源id
- 新建一個類,比如為
DynamicDataSource
,繼承AbstractRoutingDataSource
並重寫其determineCurrentLookupKey
方法使其可以返回ThreadLocal中儲存的資料來源id,並把DynamicDataSource
定義為名為dataSource
的bean,這樣就可以在IOC容器初始化中例項化該資料來源管理器。
時序圖
總結
前往原始碼包裡尋找對DataSource包裝類,覆蓋方法以提供不同的策略。Spring可擴充套件性很強,開發者可以很容易擴充套件這些類來定製自己所需的功能。
相關文章
- 基於AOP的動態資料來源切換(附原始碼)原始碼
- 註解切換雙資料來源
- Spring AOP動態切換資料來源Spring
- Spring 多資料來源 AOP 動態切換Spring
- 基於多種場景DataGuard切換方案
- Web前端主題切換的幾種方案Web前端
- 09.redis 哨兵主備切換時資料丟失的解決方案Redis
- 專案要實現多資料來源動態切換,咋搞?
- 基於註解的Spring多資料來源配置和使用Spring
- 9種基於Web的演講稿燈片解決方案Web
- spring-data-redis 動態切換資料來源SpringRedis
- spring-boot-route(十)多資料來源切換Springboot
- Spring實現多資料來源動態切換Spring
- @Transactional開啟事務導致AbstractRoutingDataSource動態資料來源無法切換的解決方案
- 執行轉換時如何讓Kettle記錄錯誤並繼續執行?——記一種解決方案
- Spring Boot MyBatis 動態資料來源切換、多資料來源,讀寫分離Spring BootMyBatis
- 「經驗彙總」基於TDengine的時序資料解決方案
- 基於Docker&Fabric的Web專案部署方案DockerWeb
- Spring Boot(七):Mybatis 多資料來源最簡解決方案Spring BootMyBatis
- 基於xml的Spring多資料來源配置和使用XMLSpring
- Python 執行js的2種解決方案PythonJS
- 基於struts專案許可權解決方案的探索 (轉)
- 基於註解的Spring多資料來源配置和使用(非事務)Spring
- mybatis 多資料來源動態切換MyBatis
- SSM(八)動態切換資料來源SSM
- AntMobile tab 切換解決方案
- 基於Spring Boot與Spring Data JPA的多資料來源配置Spring Boot
- 在typescript專案中解決cycle依賴的一種方案TypeScript
- 基於webpack的幾種靜態資源的引入方案Web
- 2.4 一種基於kafka增量資料校驗的方案Kafka
- ios微信下vue專案元件切換並自動播放音訊的解決方案iOSVue元件音訊
- Spring Boot整合quartz實現定時任務並支援切換任務資料來源Spring Bootquartz
- 多執行緒下解決資源競爭的7種方法執行緒
- 區域網內基於WEB的檔案傳輸解決方案詳解 (轉)Web
- WEB網站國際化的一種解決方案Web網站
- 10個基於Web的開源專案管理系統Web專案管理
- Spring Boot 動態資料來源(Spring 註解資料來源)Spring Boot
- 如何用Spring Boot解決專案啟動時初始化資源?Spring Boot