實際工作中,我們會遇到springboot專案初始化啟動時候,不能指定具體連線哪個資料來源的時候,不同的介面連線不同的資料來源或者前端頁面指定連線某個資料來源等等情況,就會遇到動態資料來源切換的問題。
一.通用的動態資料來源切換場景
spring boot提供了abstractroutingdatasource 根據使用者定義的規則選擇當前的資料來源,這樣我們可以在執行查詢之前,設定使用的資料來源。實現可動態路由的資料來源,在每次資料庫查詢操作前執行。它的抽象方法 determinecurrentlookupkey() 決定使用哪個資料來源.
1.繼承abstractroutingdatasource,重寫determinecurrentlookupkey方法
public class dynamicdatasource extends abstractroutingdatasource )3.實現springutils工具類並注入到spring容器中public dynamicdatasource datasource()
public satic string getproperty(string key)}
4.自定義註解和切面,實現方法級別是否切換資料來源
@document二. 頁面切換資料來源場景@retention(retentionpolicy.runtime)
@target(elementtype.method)
public @inte***ce operdatasource
@after("datasourcepointcut()")
public void aftermethod(joinpoint jp)
}
1.排除掉druid自動注入
2.手動實現druiddatasource的bean
@configuration3.自定義介面,實現重新設定資料來源public class datasourceconfig{
private datasourceproperties basicproperties;
public datasource datasource() throws ioexception, sqlexception{
druiddatasource druiddatasource = druiddatasourcebuilder.create().buid();
druiddatasource.restart();
druiddatasource.setpassword(base64.encoder getencoder(basicproperties.getpassword()));
druiddatasource druiddatasource = (druiddatasource)springutils.getbean("datasource");如果需要改寫yml檔案內容druiddatasource.restart();
druiddatasource.setdriverclassname(driverclassname);
druiddatasource.seturl(url);
需要引入
org.yaml
snakeyaml
1.26
Spring Boot多資料來源配置
方案實現 新建兩個配置類 即加 configuration註解的類 乙個為primarydatasourceconfig,用來配置本專案的資料來源 另乙個叫seconddatasourceconfig,用來配置需要同步的資料來源。如下 configuration public class prima...
springboot整合多資料來源
多資料來源產生的問題 事物管理 在實際專案中,怎麼樣搭建多資料來源 區分資料來源 舉個例子 2個資料來源 test001 test002 1 分包結構 com.baidu.test001 訪問test001資料庫 daoservice com.baidu.test002 訪問test002資料庫 d...
SpringBoot配置多資料來源
專案中用到了兩個資料庫,分別是oracle和mysql,涉及到了多資料來源問題,這裡做下記錄 官方講解 日誌jdbc配置 druid常見問題彙總 spring datasource type com.alibaba.druid.pool.druiddatasource base type com.a...