AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

多數據源管理:掌握@DS注解的威力

來源: 責編: 時間:2023-10-31 10:26:08 279觀看
導讀大家在日常后端開發過程,不可避免的會接觸到需要用到配置多個數據源的場景,在這里,小編介紹一種簡單方便的,只需要簡單的配置和一個@DS注解就能實現動態數據源的方式,這種動態數據源底層原理是基于Mybatis-plus來實現的。1

大家在日常后端開發過程,不可避免的會接觸到需要用到配置多個數據源的場景,在這里,小編介紹一種簡單方便的,只需要簡單的配置和一個@DS注解就能實現動態數據源的方式,這種動態數據源底層原理是基于Mybatis-plus來實現的。JIk28資訊網——每日最新資訊28at.com

1、配置方式

首先是pom.xmlJIk28資訊網——每日最新資訊28at.com

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

隨后配上多數據源,我們的項目中分別配置了Mysql和Doris兩種數據庫JIk28資訊網——每日最新資訊28at.com

spring:      datasource:            druid:                  localdb:                        url: xxx                        username: xxx                     driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource                  doris:                       url: xxx                        username: xxx                driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource

最后需要使用哪個數據庫,在對應的方法上加上對應的@DS(“數據庫名”)注解就可以了,在類上加@DS(“數據庫名”),那么整個類下的所有方法都會使用到這個數據源,實現方式是不是非常簡單。JIk28資訊網——每日最新資訊28at.com

@Service@DS("localdb")public class testServiceImpl extends BaseServiceImpl<testMapper, testBean> implements testService {    public void save(String arg1) {       //TODO    }        public void find(String arg2) {       //TODO    }}

1、底層實現原理

底層實現核心類是
com.baomidou.dynamic.datasource.DynamicRoutingDataSource,繼承自AbstractDataSource
JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

項目在初始化的時候會調用DynamicRoutingDataSource里面的public synchronized void addDataSource(String ds, DataSource dataSource)方法加載數據源,數據源存進dataSourceMap中。JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

隨后,如果進行數據庫操作,以方法為最小粒度,執行對應方法時,會被
DynamicDataSourceAnnotationInterceptor攔截器攔截
JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

執行determineDatasource方法,掃描加了@DS注解的類或者方法,隨后調用DynamicDataSourceContextHolder.poll方法。JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

DynamicDataSourceContextHolder.poll方法將當前線程的數據源名加到對應的ThreadLocal線程本地中JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

在之后的數據操作中,會調用org.springframework.jdbc.datasource.getConnection()方法,ThreadLocal中獲取之前攔截器存進去動態數據源名,如果沒有獲取到,就默認為配置的primary數據源,這完成了對應的動態數據源切換。JIk28資訊網——每日最新資訊28at.com

JIk28資訊網——每日最新資訊28at.com

3、總結

基于Mybatis-plus的@DS注解可以實現動態數據源切換,具有實現簡單的優點,雖然沒有AOP實現,但是用到了AOP的思想,后續小編將寫一篇基于AOP的實現方式,歡迎大家關注。JIk28資訊網——每日最新資訊28at.com

作者:京東保險 郭盼JIk28資訊網——每日最新資訊28at.com

來源:京東云開發者社區 轉載請注明來源JIk28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-16017-0.html多數據源管理:掌握@DS注解的威力

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在低版本的Spring中實現自動配置功能

下一篇: 線程類型詳解之線程優化使用技巧

標簽:
  • 熱門焦點
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
  • 外交部:美方應停止在網絡安全問題上不負責任地指責他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關科研成果。 中方對此有何評論?對此
Top