基於Spring的Web專案執行時切換資料來源的一種解決方案

Special__Yang發表於2018-08-13

場景需求

需要對於一些請求在執行時訪問不同的資料庫,並且各個請求是獨立的互不影響的。

解決方案

  1. 首先在配置中定義多個資料來源,併為每個資料來源指定id
  2. 用一個列舉類定義多個資料來源id對應的常量值
  3. 用ThreadLocal來為每一個請求儲存當前使用的資料來源id
  4. 新建一個類,比如為DynamicDataSource,繼承AbstractRoutingDataSource並重寫其determineCurrentLookupKey方法使其可以返回ThreadLocal中儲存的資料來源id,並把DynamicDataSource定義為名為dataSource的bean,這樣就可以在IOC容器初始化中例項化該資料來源管理器。

時序圖

這裡寫圖片描述

總結

前往原始碼包裡尋找對DataSource包裝類,覆蓋方法以提供不同的策略。Spring可擴充套件性很強,開發者可以很容易擴充套件這些類來定製自己所需的功能。

相關文章