SpringBoot + Mybatis多數據源

一、配置文件

spring:
#  datasource:
#    username: root
#    password: 123456
#    url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncoding=utf-8&serverTimezone=UTC
#    driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 數據源1onedata:jdbc-url: jdbc:mysql://127.0.0.1:3306/jun01?useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 數據源2twodata:jdbc-url: jdbc:mysql://127.0.0.1:3306/jun02?useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

二、數據源配置類

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 DataSourceConfiguration {// Primary 注解是在沒有指明使用哪個數據源的時候指定默認使用的主數據源@Primary@Bean("oneDataSource")@ConfigurationProperties(prefix = "spring.datasource.onedata")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean("twoDataSource")@ConfigurationProperties(prefix = "spring.datasource.twodata")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

三、數據源與 Mybatis 配置

1、數據源一

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.annotation.Resource;
import javax.sql.DataSource;@Configuration
// 指定該數據源掃描指定包下面的Mapper接口 與 *.xml文件
@MapperScan(basePackages = "com.south.mapper1",sqlSessionFactoryRef = "sqlSessionFactoryOne",sqlSessionTemplateRef = "sqlSessionTemplateOne")
public class DataSourceOneConfig {// 注入數據源1@Resourceprivate DataSource oneDataSource;@Bean@Primarypublic SqlSessionFactory sqlSessionFactoryOne() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(oneDataSource);return sqlSessionFactoryBean.getObject();}@Bean@Primarypublic SqlSessionTemplate sqlSessionTemplateOne() throws Exception {return new SqlSessionTemplate(sqlSessionFactoryOne());}
}

2、數據源二(兩種不同的配置方式,都能實現多數據源的效果)

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.example.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class DataSourceTwoConfig {// mapper 掃描 xml 文件的路徑private static final String MAPPER_LOCATION = "classpath:mapper2/*.xml";private DataSource twoDataSource;// 通過構造方法進行注入public DataSourceTwoConfig(DataSource dataSource) {this.twoDataSource = dataSource;}@Beanpublic SqlSessionFactory sqlSessionFactoryTwo() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();// 指定數據源sqlSessionFactoryBean.setDataSource(twoDataSource);/** 獲取xml文件資源對象* 當Mapper接口所對應的.xml文件與Mapper接口文件分離,存儲在 resources* 文件夾下的時候,需要手動指定.xml文件所在的路徑*/Resource[] resources = new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION);sqlSessionFactoryBean.setMapperLocations(resources);return sqlSessionFactoryBean.getObject();}@Beanpublic DataSourceTransactionManager SecondaryDataSourceManager() {return new DataSourceTransactionManager(twoDataSource);}
}

四、使用案例

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;
import java.util.List;@Controller
@RequestMapping("/testController")
public class TestController {// 數據源1Mapper注入@Resourceprivate OneMapper oneMapper;// 數據源2Mapper注入@Resourceprivate TwoMapper twoMapper;@GetMapping("/selectManyDataSouroneMapperceData")@ResponseBodypublic void selectManyDataSourceDatwoMapperta() {// 查詢數據源1中的數據List<String> message = oneMapper.getMessage();System.out.println(message);// 查詢數據源2中的數據List<String> tag = twoMapper.getTag();System.out.println(tag);}
}

?

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

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

相關文章

SCF金融公鏈新加坡啟動會 鏈結創新驅動未來

新加坡迎來一場引人矚目的金融科技盛會&#xff0c;SCF金融公鏈啟動會于2023年8月13日盛大舉行。這一受矚目的活動將為金融科技領域注入新的活力&#xff0c;并為廣大投資者、合作伙伴以及關注區塊鏈發展的人士提供一個難得的交流平臺。 在SCF金融公鏈啟動會上&#xff0c; Wil…

CentOS7的journalctl日志查看方法

多臺服務器間免密登錄|免密拷貝 Cenos7 搭建Minio集群部署服務器(一) Cenos7 搭建Minio集群Nginx統一訪問入口|反向動態代理(二) Spring Boot 與Minio整合實現文件上傳與下載(三) CentOS7的journalctl日志查看方法 MySQL8.xx一主兩從復制安裝與配置 1、概述 日志管理工…

【ElasticSearch入門】

目錄 1.ElasticSearch的簡介 2.用數據庫實現搜素的功能 3.ES的核心概念 3.1 NRT(Near Realtime)近實時 3.2 cluster集群&#xff0c;ES是一個分布式的系統 3.3 Node節點&#xff0c;就是集群中的一臺服務器 3.4 index 索引&#xff08;索引庫&#xff09; 3.5 type類型 3.6 doc…

【佳佳怪文獻分享】MVFusion: 利用語義對齊的多視角 3D 物體檢測雷達和相機融合

標題&#xff1a;MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者&#xff1a;Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 來源&#xff1a;2023 IEEE International Conference on Robotics and Automat…

kubernetes企業級高可用部署

目錄 1、Kubernetes高可用項目介紹 2、項目架構設計 2.1、項目主機信息 2.2、項目架構圖 1、Kubernetes高可用項目介紹 2、項目架構設計 2.1、項目主機信息 2.2、項目架構圖 2.3、項目實施思路 3、項目實施過程 3.1、系統初始化 3.2、配置部署keepalived服務 3.3、…

強制Edge或Chrome使用獨立顯卡【WIN10】

現代瀏覽器通常將圖形密集型任務卸載到 GPU&#xff0c;以改善你的網頁瀏覽體驗&#xff0c;從而釋放 CPU 資源用于其他任務。 如果你的系統有多個 GPU&#xff0c;Windows 10 可以自動決定最適合 Microsoft Edge 自動使用的 GPU&#xff0c;但這并不一定意味著最強大的 GPU。 …

Linux/centos上如何配置管理NFS服務器?

Linux/centos上如何配置管理NFS服務器&#xff1f; 1 NFS基礎了解1.1 NFS概述1.2 NFS工作流程 2 安裝和啟動NFS服務2.1 安裝NFS服務器2.2 啟動NFS服務 3 配置NFS服務器和客戶端3.1 配置NFS服務器3.2 配置NFS客戶端 4 實際示例4.1 基本要求4.2 案例實現 1 NFS基礎了解 NFS&…

LAXCUS如何通過技術創新管理數千臺服務器

隨著互聯網技術的不斷發展&#xff0c;服務器已經成為企業和個人獲取信息、進行計算和存儲的重要工具。然而&#xff0c;隨著服務器數量的不斷增加&#xff0c;傳統的服務器管理和運維方式已經無法滿足現代企業的需求。LAXCUS做為專注服務器集群的【數存算管】一體化平臺&#…

Jtti:Windows server如何備份與還原注冊表

在 Windows Server 中&#xff0c;備份和還原注冊表是一項重要的任務&#xff0c;可以幫助你在系統配置更改之前創建一個恢復點&#xff0c;以防止出現問題。以下是在 Windows Server 上備份和還原注冊表的步驟&#xff1a; 備份注冊表&#xff1a; 1.打開“運行”對話框&…

企業數據庫遭到360后綴勒索病毒攻擊,360勒索病毒解密

在當今數字化時代&#xff0c;企業的數據安全變得尤為重要。隨著數字化辦公的推進&#xff0c;企業的生產運行效率得到了很大提升&#xff0c;然而針對網絡安全威脅&#xff0c;企業也開始慢慢引起重視。近期&#xff0c;我們收到很多企業的求助&#xff0c;企業的服務器遭到了…

代理模式(Java實現)

代理模式是常見的設計模式之一&#xff0c;顧名思義&#xff0c;代理模式就是代理對象具備真實對象的功能&#xff0c;并代替真實對象完成相應操作&#xff0c;并能夠在操作執行的前后&#xff0c;對操作進行增強處理。&#xff08;為真實對象提供代理&#xff0c;然后供其他對…

threejs使用gui改變相機的參數

調節相機遠近角度 定義相機的配置&#xff1a; const cameraConfg reactive({ fov: 45 }) gui中加入調節fov的方法 const gui new dat.GUI();const cameraFolder gui.addFolder("相機屬性設置");cameraFolder.add(cameraConfg, "fov", 0, 100).name(…

YOLO格式數據集(.txt)如何轉換為VOC格式數據集(.xml)

前言&#xff1a; 安裝好python環境與編譯器 轉換&#xff1a; 將標注文件從文本格式&#xff08;.txt&#xff09;轉換為 XML 格式&#xff08;.xml&#xff09;可以通過以下步驟完成&#xff1a; 解析文本標注文件&#xff1a;打開 .txt 文件&#xff0c;逐行讀取每個標注…

Gin模板語法

Gin模板語法 文章目錄 <center> Gin模板語法前提提醒Gin框架啟動服務器模板解析模板渲染遇到不同目錄下相同的文件如何加載和渲染自定義函數加載靜態文件 前提提醒 由于有了前面template包的基礎,所以該筆記不再過多詳細分析 Gin框架啟動服務器 語法: r:gin.Default()/…

Medical Isolated Power Supply System in Angola

安科瑞 華楠 Abstract: Diagnosis and treatment in modern hospitals are inseparable from advanced medical equipment, which are inseparable from safe and reliable power supply. Many operations often last for several hours, and the consequences of a sudden pow…

【UE4 RTS】07-Camera Boundaries

前言 本篇實現的效果是當CameraPawn移動到地圖邊緣時會被阻擋。 效果 步驟 1. 打開項目設置&#xff0c;在“引擎-碰撞”中&#xff0c;點擊“新建Object通道” 新建通道命名為“MapBoundaries”&#xff0c;然后點擊接受 2. 向視口中添加 阻擋體積 調整阻擋體積的縮放 向四…

【TypeScript】this指向,this內置組件

this類型 TypeScript可推導的this類型函數中this默認類型對象中的函數中的this明確this指向 怎么指定this類型 this相關的內置工具類型轉換ThisParameterType<>ThisParameterType<>ThisType TypeScript可推導的this類型 函數中this默認類型 對象中的函數中的this…

華為OD機試-字符串序列判定

題目描述 給定兩個字符串 s和 t &#xff0c;判斷 s是否為 t 的子序列。 你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長&#xff08;長度n ~ 500,000&#xff09;&#xff0c;而 s 是個短字符串&#xff08;長度 <100&#xff09;。字符串的一個子序列是原…

Docker容器:docker基礎及安裝

文章目錄 一.docker容器概述1.什么是容器2. docker與虛擬機的區別2.1 docker虛擬化產品有哪些及其對比2.2 Docker與虛擬機的區別 3.Docker容器的使用場景4.Docker容器的優點5.Docker 的底層運行原理6.namespace的六項隔離7.Docker核心概念 二.Docker安裝 及管理1.安裝 Docker1.…

【科研論文配圖繪制】task1 掌握科研繪圖的基本知識

【科研論文配圖繪制】task1 掌握科研繪圖的基本知識 寫在最前 8月份Datawhale組隊學習&#xff0c;寫下該博客記錄學習內容 1.科研論文配圖的分類與構成 2.科研論文配圖的格式和尺寸 3.科研論文配圖中的字體和字號設置 4.科研論文配圖的版式設計、結構布局和顏色搭配 占個…