日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

1、配置方式

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

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

隨后配上多數據源,我們的項目中分別配置了Mysql和Doris兩種數據庫K6J28資訊網——每日最新資訊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(“數據庫名”),那么整個類下的所有方法都會使用到這個數據源,實現方式是不是非常簡單。K6J28資訊網——每日最新資訊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
K6J28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

3、總結

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

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

來源:京東云開發(fā)者社區(qū) 轉載請注明來源K6J28資訊網——每日最新資訊28at.com

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

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

上一篇: 使用Python類型提示,保持代碼整潔,提高可讀性

下一篇: 使用Java實現每分鐘限流100個請求的功能

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top 主站蜘蛛池模板: 靖安县| 句容市| 淳化县| 启东市| 雷山县| 汉阴县| 会泽县| 慈溪市| 玉山县| 文化| 瓦房店市| 黔西县| 延吉市| 河西区| 天全县| 高雄县| 许昌市| 祥云县| 华阴市| 屏东市| 威宁| 竹溪县| 荥阳市| 松潘县| 临邑县| 福泉市| 澄江县| 普格县| 南昌县| 松溪县| 昆山市| 巍山| 都匀市| 奉新县| 台南市| 岗巴县| 蒙城县| 共和县| 吉林省| 南岸区| 印江|