【Spring Boot】集成多數(shù)據(jù)源

實現(xiàn)多數(shù)據(jù)源的方式有很多種,本例采用com.baomidou(MybatisPlus擁有者旗下)包下的dynamic-datasource來實現(xiàn)。

1. 具體步驟

1.1 添加依賴

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>2.5.4</version>
</dependency>

1.2 配置數(shù)據(jù)源,mybatis-plus支持各種數(shù)據(jù)源的配置

配置一個默認(rèn)庫master视译,兩個子庫slave_1,slave_2挪哄,要注意的是如果用的mysql數(shù)據(jù)庫私沮,不需要設(shè)置driver-class-name,框架會自身自動補全這部分內(nèi)容香璃,如果用的oracle還是要去修改的这难。

spring:
  datasource:
    dynamic:
      primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
      strict: false #設(shè)置嚴(yán)格模式,默認(rèn)false不啟動. 啟動后在未匹配到指定數(shù)據(jù)源時候會拋出異常,不啟動則使用默認(rèn)數(shù)據(jù)源.
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0開始支持SPI可省略此配置
        slave_1:
          driver-class-name: oracle.jdbc.OracleDriver
          url: jdbc:oracle:thin:@192.168.7.88:1521:db
          username: test
          password: test
          #Oracle需要打開注釋
          validation-query: SELECT 1 FROM DUAL
        slave_2:
          url: ENC(xxxxx) # 內(nèi)置加密,使用請查看詳細(xì)文檔
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
          schema: db/schema.sql # 配置則生效,自動初始化表結(jié)構(gòu)
          data: db/data.sql # 配置則生效,自動初始化數(shù)據(jù)
          continue-on-error: true # 默認(rèn)true,初始化失敗是否繼續(xù)
          separator: ";" # sql默認(rèn)分號分隔符

1.3 通過注解方式注解到類或者方法上

項目中使用@DS注解來切換數(shù)據(jù)源,@DS使用需要注意的幾點:

  • @DS(注解不能直接用于mapper類上只能用在service層的類或方法上
  • @DS可以注解在方法或類上葡秒,同時存在使用就近原則姻乓,方法上注解優(yōu)于類上注解
  • @DS和@Transactional(rollbackFor = Exception.class)不要同時使用,會導(dǎo)致切換數(shù)據(jù)源失效
@Service("LdService")
@DS("slave_1")
public class LdServiceImpl implements LdService {
}

也可使用DynamicDataSourceContextHolder.push(dsKey);方法來切換數(shù)據(jù)源眯牧,dsKey:你自己要切換的數(shù)據(jù)源名稱蹋岩,和@DS括號中的一樣

2.切換數(shù)據(jù)源失效場景

(1)@DS中寫的是錯誤的數(shù)據(jù)源符號,如oracle寫成了orcale,雖然一個字符之差学少,而且也很難察覺剪个,這樣如果配置了默認(rèn)數(shù)據(jù)源則會使用默認(rèn)的數(shù)據(jù)源,否則會拋出異常版确。
(2)@DS和@Transactional(rollbackFor = Exception.class)不要同時使用扣囊,若同時使用會將數(shù)據(jù)源直接交給spring來管理,這也是切換數(shù)據(jù)源經(jīng)常失效場景之一绒疗,若需要使用事務(wù)侵歇,則要考慮分布式事務(wù),常用的分布式事務(wù)框架有Seata忌堂、TX-LCN等等 盒至。注意:其他多數(shù)據(jù)源的方法也是如此。
(3)方法內(nèi)部的相互調(diào)用士修,如:

public UserService {
    @DS("first")
    public void test1() {
        // do something
         test2();
    }
    @DS("second")
    public void test2() {
        // do something
    }
}

部調(diào)用 userservice.test1() 在執(zhí)行到 test2()中的時候也是不能切換數(shù)據(jù)源的枷遂,解決方式為把test2()方法提到另外一個service,單獨調(diào)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棋嘲,隨后出現(xiàn)的幾起案子酒唉,更是在濱河造成了極大的恐慌,老刑警劉巖沸移,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪伦,死亡現(xiàn)場離奇詭異侄榴,居然都是意外死亡,警方通過查閱死者的電腦和手機网沾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門癞蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辉哥,你說我怎么就攤上這事桦山。” “怎么了醋旦?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵恒水,是天一觀的道長。 經(jīng)常有香客問我饲齐,道長钉凌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任捂人,我火速辦了婚禮御雕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滥搭。我一直安慰自己饮笛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布论熙。 她就那樣靜靜地躺著,像睡著了一般摄狱。 火紅的嫁衣襯著肌膚如雪脓诡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天媒役,我揣著相機與錄音祝谚,去河邊找鬼。 笑死酣衷,一個胖子當(dāng)著我的面吹牛交惯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穿仪,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼席爽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啊片?” 一聲冷哼從身側(cè)響起只锻,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎紫谷,沒想到半個月后齐饮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捐寥,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年祖驱,在試婚紗的時候發(fā)現(xiàn)自己被綠了握恳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捺僻,死狀恐怖乡洼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陵像,我是刑警寧澤就珠,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站醒颖,受9級特大地震影響妻怎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泞歉,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一逼侦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腰耙,春花似錦榛丢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至选侨,卻和暖如春掖鱼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背援制。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工戏挡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晨仑。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓褐墅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洪己。 傳聞我的和親對象是個殘疾皇子妥凳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容