MybatisPlus多數據源配置

      網友投稿 2520 2022-05-30

      1.簡介

      多數據源即需要在不同庫上進行操作時所需要的配置,分為不同服務跨庫進行操作、相同服務跨庫進行操作,本例中按照mybatisPlus的方法進行操作處理。

      這種也可以稱為動態數據源,主要操作是在方法上、類上或者mapper上進行@DS(“配置好的數據源的名稱”)注解的標注,動態切換數據源,沒有標注的會使用默認配置的數據源,標注的名字的則會使用已存在的配置的這個名字的數據源,簡單便捷~

      2.mybatisPlus多數據源操作

      官網文檔

      2.1 首先是導入多數據源的依賴

      注意一點是次數導入的依賴的版本號需要與項目其他相關的使用mybatisPlus的版本號保持一致,要不一致可能會導致循環依賴(不同版本直接,不知道用哪一個)的情況。

      MybatisPlus多數據源配置

      com.baomidou dynamic-datasource-spring-boot-starter ${version}

      2.2 配置application.yml中的多數據源

      此處以mysql為例,其中dynamic下的primary為默認的數據源,在后面使用中,如果沒有使用@DS進行標注使用其他的數據源,會默認使用此處的數據源。

      在spring.datasource.dynamic.datasource下是配置的多數據源,名稱可以任意起,可以配置很多個。

      #配置數據源 spring: datasource: type: com.zaxxer.hikari.HikariDataSource # 數據源類型:HikariCP dynamic: primary: master #設置默認的數據源或者數據源組,默認值即為master datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test1?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: password slave: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test2?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: password

      2.3 使用

      只需要在方法或者類名上加@DS(“上面配置的多數據源簽名的名字”),即可開啟多數據源的查詢操作。

      其中多數據源在不切換數據源的sql查詢是這樣的 select * from 數據庫1.t1 LEFT JOIN 數據庫2.t2 ON 數據庫1.t1.id = 數據庫2.t2.id,只需要在我們正常的sql中的字段前面加上數據庫名就可以了,這里是適用于同服務不同庫直接的操作。

      @DS("slave") public XXX test(XXX xxx...) { }

      使用時需要注意以下幾點:

      2.3.1 不能使用事務,否則數據源不會切換,使用的還是第一次加載的數據源;

      2.3.2 第一次加載數據源之后,第二次、第三次…操作其它數據源,如果數據源不存在,使用的還是第一次加載的數據源;

      2.3.3 數據源名稱不要包含下劃線,否則不能切換。

      2.4 一次使用多個數據源進行操作

      一次使用多個數據源進行操作,是通過多線程的方法開啟多個個連接進行操作的。參考

      由于沒有相關業務暫時沒有測試過下面這種方法,在此記錄一下待后面有空了進行測試總結~

      @Override @DataSource(value = DataSourceNames.TWO) public Map getSandardByReportId(Integer id) { ExecutorService executor = Executors.newSingleThreadExecutor(); FutureTask task = new FutureTask(new Callable() { @Override public Integer call() throws Exception { return getStandardIdBy(id); } }); executor.submit(task); Map map = null; try { map = getSandardMapById(task.get()); return map; } catch (InterruptedException e) { e.printStackTrace(); return null; } catch (ExecutionException e) { e.printStackTrace(); return null; } } @DataSource(value = DataSourceNames.TWO) public Map getSandardMapById(Integer id) { Map map = craftExtrCheckStandardMapper.getStandardById(id); return map; } @DataSource(value = DataSourceNames.ONE) public Integer getStandardIdBy(Integer reportId) { Integer checkIdByReportId = extrProductOrderMapper.getCheckIdByReportId(reportId); return checkIdByReportId; }

      參考一?@DS輕松解決動態數據源問題

      參考二 事務和@DS同時使用的操作

      因為所需要處理的業務在同一個服務器上的跨庫操作,所以暫時沒有測過不同服務直接的跨庫操作,還有上面這種@DS和事務一起使用的情況暫時沒有測過。

      參考三 若依框架配置多數據源

      參考四 若以框架配置數據源官網

      以上就是今天爬坑內容,爬完一個坑還有另一個坑,希望后面能順順利利的~加油~

      SQL 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【Android 電量優化】電量優化 ( 使用 AlarmManager 保持 CPU 喚醒 )
      下一篇:性能監控之 Java Metrics 度量包
      相關文章
      亚洲精品成人区在线观看| 伊在人亚洲香蕉精品区麻豆| 亚洲午夜精品一级在线播放放| 久久亚洲精品11p| 亚洲狠狠婷婷综合久久蜜芽| 亚洲色欲啪啪久久WWW综合网| 久久亚洲国产成人影院| 亚洲an日韩专区在线| 亚洲福利秒拍一区二区| 亚洲成a人片在线观看中文!!!| 亚洲国产美女精品久久久久| 亚洲美女在线观看播放| 亚洲欧洲春色校园另类小说| 亚洲午夜一区二区电影院| 亚洲av一本岛在线播放| 亚洲日韩国产欧美一区二区三区| 亚洲色精品三区二区一区| 亚洲AV性色在线观看| 亚洲国产精品第一区二区三区| 久久久久久久亚洲精品| 亚洲精品中文字幕无码蜜桃| 亚洲国产精品无码成人片久久| 久久精品夜色国产亚洲av| 日韩精品一区二区亚洲AV观看| 1区1区3区4区产品亚洲| 亚洲国产一区在线观看| 亚洲人成77777在线观看网| 亚洲日韩亚洲另类激情文学| 含羞草国产亚洲精品岁国产精品 | 亚洲自偷自偷精品| 亚洲天堂一区二区三区四区| 亚洲制服丝袜中文字幕| 亚洲欧洲精品成人久久曰| 在线观看亚洲专区| 激情综合色五月丁香六月亚洲| 国产亚洲精品a在线无码| 日韩精品一区二区亚洲AV观看| 亚洲a级片在线观看| 亚洲精品国产av成拍色拍| 亚洲国产精品成人久久蜜臀 | 亚洲爆乳无码专区|