基於spring實現多資料來源通過註解切換

2021-08-28 10:27:45 字數 1913 閱讀 6976

許多專案都有主庫與從庫,主庫用來寫,從庫用來讀。

那麼在開發中,為了方便切庫,我們通過可以用註解來標誌,標誌這個方法是使用主庫還是從庫

如何實現多資料來源切庫呢?

主要使用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...