spring多資料來源動態切換及事務

2021-07-30 06:12:44 字數 774 閱讀 4674

1、使用了spring的aop思想,實現了動態資料來源的切換。

2、spring的事務管理,是基於資料來源的,所以如果要實現動態資料來源切換,而且在同乙個資料來源中保證事務是起作用的話,就需要注意二者的順序問題,即:在事物起作用之前就要把資料來源切換回來。

舉乙個例子:web開發常見是三層結構:controller、service、dao。一般事務都會在service層加的,如果使用spring的宣告式事物管理,那麼在呼叫service層**之前,spring會通過aop的方式動態新增事務控制**,所以如果要想保證事物是有效的,那麼必須spring新增事務之前把資料來源動態切換過來,也就是動態切換資料來源的aop要至少在service上新增,而且要在spring宣告式事物aop之前新增。

最簡單的方式是,把動態切換資料來源的aop加到controller層,這樣在controller層裡面就可以確定下來資料來源了。不過,這樣有乙個缺點就是,每乙個controller繫結了乙個資料來源,不靈活。對於這種:乙個請求,需要使用兩個以上資料來源中的資料完成的業務,就無法實現了。

針對上面的這種問題,可以考慮把動態切換資料來源的aop放到service層,但要注意一定要在事務aop之前來完成。這樣,對於乙個需要多個資料來源資料的請求,我們只需要在controller裡面注入多個service實現即可。但這種做法的問題在於,controller層裡面會涉及到一些不必要的業務**,例如:合併兩個資料來源中的list...

針對上面的問題,可以再考慮一種方案,就是把事務控制到dao層,然後在service層裡面動態切換資料來源。

其他有參考價值的文章:

Spring多資料來源配置和動態切換

平常我們工作有時會有讀寫分離,或者業務資料在不同的資料庫的情況,如果在乙個專案裡操作,就需要配置多個資料來源,並進行動態的切換了。服務框架 spring mybatis druid 多資料來源的配置有兩種方式 第一種是基於配置來實現 將資料來源的配置一摸一樣的配置多個,這種情況下,就需要將不同的業務...

springboot 多資料來源動態切換

1.取消單資料來源預設配置 datasourceautoconfiguration.class public static void main string args 2.切換資料來源 aspect component lazy false order 0 order設定aop執行順序 使之在資料庫...

spring 多資料來源

之前嘗試的乙個多資料來源切換的功能測試可以實現了,下面進行一下簡單的筆記 testservice 方法通過以下方式進行主動切換 dynamicdatasource 類 package com.utils import org.springframework.jdbc.datasource.looku...