springboot使用mybatis配置多數據源,同時能使用mybatisplus

概述

配置多數據源有兩種方案。一種是使用dynamic依賴的@DS注解的方法,這種是比較簡單方便的方法。另一種是本文介紹的方式,配置不同數據源的SqlSessionFactory 。
第二種方法是我在開發一個老項目時,老項目配置的方法。

application.xml

server:port: 8002spring:datasource:master:jdbc-url: xxxusername: usernamepassword: passworddriver-class-name: driver-class-nameslave:jdbc-url: xxxusername: usernamepassword: passworddriver-class-name: driver-class-name

初始化多數據源

package com.zou.myproject.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;@Configuration
public class DatasourceConfig {@Primary@Bean("masterDatasource")@ConfigurationProperties(prefix = "spring.datasource.master")public DataSource masterDatasource(){return DataSourceBuilder.create().build();}@Bean("slaveDatasource")@ConfigurationProperties(prefix = "spring.datasource.slave")public DataSource slaveDatasource(){return DataSourceBuilder.create().build();}}

主數據源配置

package com.zou.myproject.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.zou.myproject.mapper",sqlSessionFactoryRef = "sqlSessionFactoryMaster",sqlSessionTemplateRef = "sqlSessionTemplateMaster"
)
public class MasterDatasourceConfig {private DataSource masterDatasource;public MasterDatasourceConfig(@Qualifier("masterDatasource") DataSource masterDatasource){this.masterDatasource = masterDatasource;}@Bean("sqlSessionFactoryMaster")@Primarypublic SqlSessionFactory sqlSessionFactoryMaster() throws Exception{MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(masterDatasource);PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();bean.setMapperLocations(resolver.getResources("classpath*:/mapper/*.xml"));return bean.getObject();}@Bean("sqlSessionTemplateMaster")@Primarypublic SqlSessionTemplate sqlSessionTemplateMaster() throws Exception{return new SqlSessionTemplate(sqlSessionFactoryMaster());}
}

次數據源

package com.zou.myproject.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.zou.myproject.mapper2",sqlSessionFactoryRef = "sqlSessionFactorySlave",sqlSessionTemplateRef = "sqlSessionTemplateSlave"
)
public class SlaveDatasourceConfig {private DataSource slaveDatasource;public SlaveDatasourceConfig(@Qualifier("slaveDatasource") DataSource slaveDatasource){this.slaveDatasource = slaveDatasource;}@Bean("sqlSessionFactorySlave")public SqlSessionFactory sqlSessionFactorySlave() throws Exception{MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(slaveDatasource);PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();bean.setMapperLocations(resolver.getResources("classpath*:/mapper2/*.xml"));return bean.getObject();}@Bean("sqlSessionTemplateSlave")public SqlSessionTemplate sqlSessionTemplateSlave() throws Exception{return new SqlSessionTemplate(sqlSessionFactorySlave());}
}

測試

我這里就不貼代碼了。思路就是創建單元測試,新建兩個mapper,不同mapper對應不同數據源。最后我自己的測試方法是可行的。

啟動類取消mybatisplus的自動裝配

如果上面配置完啟動后,使用mybatisplus封裝的方法報了Invalid bound statement的錯誤,就把MybatisAutoConfiguration.class從啟動類中排除掉。

package com.zou.myproject;import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(exclude = MybatisAutoConfiguration.class)
public class MyProjectApplication {public static void main(String[] args) {SpringApplication.run(MyProjectApplication.class, args);}}

總結

springboot mybatis mybatisplus+多數據源配置+事務,這塊內容開發的時候都是一直查一直試錯才找到解決方案的,有時間得看源碼才能理清楚。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41539.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos 7鏡像(iso)下載圖文教程(超詳細)

聲明:本教程為本人學習筆記,僅供參考 文章目錄 前言一、阿里云鏡像站下載centos 7 二、清華源下載centos 7小結 前言 聲明:本教程為本人學習筆記,僅供參考 本教程將提供兩種方式下載centos 7 系統鏡像 1、阿里巴巴開源鏡像站 2、…

vue入門

Attribute 綁定 v-bind:取值方式 開發前準備 安裝node.js需要高于15.0 創建vue項目 npm init vuelatest安裝 npm install 啟動 npm run dev模板語法 文本插值 {{ 變量 }} <p> {{ mesg }} </p>這種方式公支持單一表達式&#xff0c;也可以是js代碼&#xf…

大數據課程I2——Kafka的架構

文章作者郵箱:yugongshiye@sina.cn 地址:廣東惠州 ▲ 本章節目的 ? 掌握Kafka的架構; ? 掌握Kafka的Topic與Partition; 一、Kafka核心概念及操作 1. producer生產者,可以是一個測試線程,也可以是某種技術框架(比如flume)。 2. producer向kafka生…

SIP網絡音頻模塊SV-2401V網絡對講音頻模塊(支持POE)

功能和特點 音頻工作方式&#xff1a; 音頻解碼&#xff1a;即音頻播放。接收來自網絡的音頻流&#xff0c;經過模塊解碼后通過線路輸出高質量音頻信號。目前支持可以播放以下音頻格式&#xff1a;MP3、WAV (PCM IMA ADPCM)、G.711、G.722等&#xff0c;可以播放最高48k采樣率…

C語言,二級指針,p,*p,**p的使用

二級指針的使用是一個非常不易的問題&#xff0c;主要還是用的少了&#xff0c;如果經常使用到他&#xff0c;就會很明顯的感受到其具體使用方法。 char *a[10]{"as","bc","ssasd","asd"}&#xff1b; char **pa; 則 p,*p,**p的含義…

ROS-PyQt小案例

前言&#xff1a;目前還在學習ROS無人機框架中&#xff0c;&#xff0c;&#xff0c; 更多更新文章詳見我的個人博客主頁【前往】 ROS與PyQt5結合的小demo&#xff0c;用于學習如何設計一個界面&#xff0c;并與ROS中的Service和Topic結合&#xff0c;從而控制多個小烏龜的運動…

當判斷條件更多的時候,使用JS映射,讓代碼更加的優雅。

前端在進行各種判斷的時候&#xff0c;if會用到很多&#xff0c;但是如果判斷的條件過多&#xff0c;還一直用if&#xff0c;代碼會非常臃腫&#xff0c;而且可修改性不強 那么就有人說了&#xff0c;if不行&#xff0c;那我用switch case唄&#xff0c;但是用switch case 也沒…

不懂瞎指揮,就會闖大禍

不懂瞎指揮&#xff0c;就會闖大禍 【安志強趣講《孫子兵法》第12講】 【原文】 故君之所以患于軍者三&#xff1a;不知軍之不可以進而謂之進&#xff0c;不知軍之不可以退而謂之退&#xff0c;是謂縻軍&#xff1b; 【注釋】 患&#xff0c;危害、貽害。 縻&#xff08;m&…

Fine tune簡介

目錄 Intro Related work Example .1 重新訓練 .2 使用新的數據集進行fine tune .3 修改net結構 References 移學習不是一種算法而是一種機器學習思想,應用到深度學習就是微調(Fine-tune)。通過修改預訓練網絡模型結構(如修改樣本類別輸出個數),選擇性載入預訓練網絡…

拒絕擺爛!C語言練習打卡第三天

&#x1f525;博客主頁&#xff1a;小王又困了 &#x1f4da;系列專欄&#xff1a;每日一練 &#x1f31f;人之為學&#xff0c;不日近則日退 ??感謝大家點贊&#x1f44d;收藏?評論?? 目錄 一、選擇題 &#x1f4dd;1.第一題 &#x1f4dd;2.第二題 &#x1f4…

【LeetCode】337.打家劫舍Ⅲ

題目 小偷又發現了一個新的可行竊的地區。這個地區只有一個入口&#xff0c;我們稱之為 root 。 除了 root 之外&#xff0c;每棟房子有且只有一個“父“房子與之相連。一番偵察之后&#xff0c;聰明的小偷意識到“這個地方的所有房屋的排列類似于一棵二叉樹”。 如果 兩個直…

Command Injection

Command Injection Command Injection&#xff0c;即命令注入&#xff0c;是指通過提交惡意構造的參數破壞命令語句結構&#xff0c;從而達到執行惡意命令的目的。PHP命令注入攻擊漏洞是PHP應用程序中常見的腳本漏洞之一。 PHP命令注入漏洞的函數 systme()、exec()、shell_ex…

【3Ds Max】彎曲命令的簡單使用

簡介 在3ds Max中&#xff0c;"彎曲"&#xff08;Bend&#xff09;是一種用于在平面或曲面上創建彎曲效果的建模命令。使用彎曲命令&#xff0c;您可以將對象沿特定軸向彎曲&#xff0c;從而創建出各種彎曲的幾何形狀。以下是使用3ds Max中的彎曲命令的基本步驟&…

8月17日,每日信息差

1、專家稱無需太過擔心EG.5變異株 2、快手職級體系調整&#xff0c;職級序列由雙軌變單軌 3、抖音、火山引擎、中國電影資料館發起“經典香港電影修復計劃”&#xff0c;一年內將100部香港電影修復至4K版本。本次修復工作由火山引擎提供技術支持&#xff0c;與中國電影資料館…

【Bert101】最先進的 NLP 模型解釋【01/4】

0 什么是伯特&#xff1f; BERT是來自【Bidirectional Encoder Representations from Transformers】變壓器的雙向編碼器表示的縮寫&#xff0c;是用于自然語言處理的機器學習&#xff08;ML&#xff09;模型。它由Google AI Language的研究人員于2018年開發&#xff0c;可作為…

【Harbor】使用手冊

一、Harbor使用方式 Harbor 作為鏡像倉庫&#xff0c;主要的交互方式就是 將鏡像上傳到Harbor上&#xff0c;以及從Harbor上下載指定鏡像 在傳輸鏡像前&#xff0c;可以先使用 Harbor 提供的權限管理&#xff0c;將項目設置為私有項目&#xff0c;并對不同用戶設置不同角色&…

基于Spring Boot的高校在線考試系統的設計與實現(Java+spring boot+VUE+MySQL)

獲取源碼或者論文請私信博主 演示視頻&#xff1a; 基于Spring Boot的高校在線考試系統的設計與實現&#xff08;Javaspring bootVUEMySQL&#xff09; 使用技術&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

uniapp小程序實現上傳圖片功能,并顯示上傳進度

效果圖&#xff1a; 實現方法&#xff1a; 一、通過uni.chooseMedia(OBJECT)方法&#xff0c;拍攝或從手機相冊中選擇圖片或視頻。 官方文檔鏈接: https://uniapp.dcloud.net.cn/api/media/video.html#choosemedia uni.chooseMedia({count: 9,mediaType: [image,video],so…

vscode用ssh遠程連接linux

1、vscode是利用ssh遠程連接linux的&#xff0c;所以首先確保vscode已經安裝了這兩個插件 2、點擊左下角的連接 3、選擇Connect to Host…… 5、按格式輸入 ssh 主機名ip 比如我的&#xff1a;ssh mnt192.168.198.128 6、選擇第一個打開配置文件&#xff0c;確保輸入正確 7、…

spring bean創建總覽 1

1 開始 這是一個總圖 下邊慢慢看 我們最基礎的寫的方式就是xml的方式去寫 像這樣&#xff0c; 而我們會通過applicationContext的方式去獲得我們的bean &#xff0c;我其中一篇博客就寫到了applicationContext他的父類就是beanFactory 但是中間的是怎么樣處理的呢&#xff1f…