基於Spring的Web專案執行時切換資料來源的一種解決方案
場景需求
需要對於一些請求在執行時訪問不同的資料庫,並且各個請求是獨立的互不影響的。
解決方案
- 首先在配置中定義多個資料來源,併為每個資料來源指定id
- 用一個列舉類定義多個資料來源id對應的常量值
- 用ThreadLocal來為每一個請求儲存當前使用的資料來源id
- 新建一個類,比如為
DynamicDataSource
,繼承AbstractRoutingDataSource
並重寫其determineCurrentLookupKey
方法使其可以返回ThreadLocal中儲存的資料來源id,並把DynamicDataSource
定義為名為dataSource
的bean,這樣就可以在IOC容器初始化中例項化該資料來源管理器。
時序圖
總結
前往原始碼包裡尋找對DataSource包裝類,覆蓋方法以提供不同的策略。Spring可擴充套件性很強,開發者可以很容易擴充套件這些類來定製自己所需的功能。
相關文章
- 基於AOP的動態資料來源切換(附原始碼)原始碼
- 註解切換雙資料來源
- Web前端主題切換的幾種方案Web前端
- @Transactional開啟事務導致AbstractRoutingDataSource動態資料來源無法切換的解決方案
- 09.redis 哨兵主備切換時資料丟失的解決方案Redis
- spring-boot-route(十)多資料來源切換Springboot
- spring-data-redis 動態切換資料來源SpringRedis
- 基於多種場景DataGuard切換方案
- 專案要實現多資料來源動態切換,咋搞?
- siebel切換資料來源【轉】
- 「經驗彙總」基於TDengine的時序資料解決方案
- SpringBoot3整合Druid資料來源的解決方案Spring BootUI
- 在typescript專案中解決cycle依賴的一種方案TypeScript
- Spring Boot整合quartz實現定時任務並支援切換任務資料來源Spring Bootquartz
- mybatis 多資料來源動態切換MyBatis
- 2.4 一種基於kafka增量資料校驗的方案Kafka
- WEB網站國際化的一種解決方案Web網站
- 多執行緒下解決資源競爭的7種方法執行緒
- 如何用Spring Boot解決專案啟動時初始化資源?Spring Boot
- 【解決方案】專案重構之如何使用 MySQL 替換原來的 MongoDBMySqlMongoDB
- 服務雪崩的6種解決方案(基於ribbon)
- 透徹講解,Java執行緒的6種狀態及切換Java執行緒
- Vue + Spring Boot 專案實戰(十九):Web 專案優化解決方案VueSpring BootWeb優化
- 30個類手寫Spring核心原理之動態資料來源切換Spring
- dhtmlxGantt用於建築行業的專案管理軟體解決方案HTML行業專案管理
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- 一個基於ASP.NET Core完全開源的CMS 解決方案ASP.NET
- 打造基於 PostgreSQL/openGauss 的分散式資料庫解決方案SQL分散式資料庫
- spring boot 多模組專案整合 mybatis 時提示找到不 Mapper 的解決方案Spring BootMyBatisAPP
- 30個類手寫Spring核心原理之動態資料來源切換(8)Spring
- 如何用實時資料追蹤來解決專案瓶頸?
- 詳解 RxJava2 的執行緒切換原理RxJava執行緒
- 模切行業完美解決方案的模切ERP系統行業
- 基於商業版Hadoop搭建的資料倉儲解決方案Hadoop
- 基於.NET的程式讀取Excel檔案的解決方案Excel
- 不會 Web 開發,也能讓資料“動”起來的開源專案!Web
- Laravel Mix執行時關於es2015報錯解決方案Laravel
- 關於0xc000007b的一種解決方案