許多專案都有主庫與從庫,主庫用來寫,從庫用來讀。
那麼在開發中,為了方便切庫,我們通過可以用註解來標誌,標誌這個方法是使用主庫還是從庫
如何實現多資料來源切庫呢?
主要使用spring的abstractroutingdatasource實現,先簡單了解下abstractroutingdatasource
我們配置的多個資料來源會放在abstractroutingdatasource的 targetdatasources和defaulttargetdatasource中
abstractroutingdatasource
的getconnection方法會先呼叫determinetargetdatasource()方法返回lookupkey鍵,根據lookupkey鍵對不同目標資料來源呼叫。
所以,我們主要通過自己重寫determinecurrentlookupkey()方法返回lookupkey即可。
實現多資料來源切換的大致思路是:
建立用於標誌資料來源的自定義註解
通過配置切面,在運算元據庫的方法之前,掃瞄該方法的註解所配置的資料來源名稱,將名稱儲存在乙個代表當前執行緒變數工具類
建立abstarctroutingdatasource子類
dynamicdatasourc
,重寫determinecurrentlookupkey()方法,把當前執行緒變數的工具類儲存的資料來源名稱返回即可。
在spring配置檔案中,將多個資料來源配置到我們建立的
dynamicdatasourc
第一步,配置資料來源
第二步,定義用來切庫的註解,和列舉類
@target()
@retention(retentionpolicy.runtime)
public @inte***ce dataswitch
public enum datatype
public string getvalue()
public void setvalue(string value)
}
第三步,定義乙個
當前執行緒的變數的工具類,用於設定對應的資料來源名稱
public class dynamicdatasourceholder
public static void setthreadlocal(string name)
public static void clear()
}
第四步,建立abstactroutingdatasource的子類,重寫determinecurrentlockupkey方法
public class dynamicdatasource extends abstractroutingdatasource
}
第五步,將多資料來源配置到用我們建立的
dynamicdatasource
第六步,配置切面,在運算元據庫方法之前,獲取註解配置的資料來源名稱,返回
@component
@aspect
@order(0)
public class datasourceaspect
@before("aspect()")
public void before(joinpoint joinpoint)
}if(!is)
}@after("aspect()")
public void after()
}
第七步,使用
@service
public class demoservice
}}
spring 多資料來源
之前嘗試的乙個多資料來源切換的功能測試可以實現了,下面進行一下簡單的筆記 testservice 方法通過以下方式進行主動切換 dynamicdatasource 類 package com.utils import org.springframework.jdbc.datasource.looku...
Spring實現多資料來源操作
spring中實現多資料來源 只需要繼承abstractroutingdatasource抽象類,實現determinecurrentlookupkey 方法即可。1.該方法返回乙個key。根據這個key protected datasource determinetargetdatasource ...
spring多資料來源配置
前段時間由於公司專案需求,需要多資料來源的支援,苦b折騰了兩天程式猿,話不多說,直接擼碼。classpath jdbc.properties select 1 true select 1 true org.hibernate.dialect.mysqldialect false update tru...