SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)

news2025/1/15 7:41:27

SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)

在实际的项目开发中,我们往往需要同时连接多个数据源对数据进行处理。本文将详细介绍在SpringBoot下配合MybatisPlus如何连接多数据源,实例将会使用连接MySQL、SqlServer进行测试,可自行根据思路供自行连接Oracle、PostgreSQL等数据库。

1 创建需要的数据库和数据

1.1准备工作:

需要准备至少两台以上安装有mysql或sqlserver其他数据库的服务器,便于后续测试
例如:已经在服务器上安装好以下数据库
MySQL版本: 5.7.44
SqlServer版本: 2012

1.2 创建mysql测试库

例如在192.168.3.220服务器上创建jialiangkj-pet数据库,创建test表并添加测试数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `remark` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, '哈士奇', '这是一个正式库');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

在192.168.88.170服务器上创建jialiangkj-pet数据库,添加test表并添加测试数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `remark` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, '边牧', '这是一个测试库');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

1.3 创建sqlserver测试库

在本机的sqlserver数据库上创建test数据库,创建test表并添加测试数据

CREATE TABLE test.dbo.test (
	id int NOT NULL,
	name varchar(20) COLLATE Chinese_PRC_CI_AS NULL,
	remark varchar(50) COLLATE Chinese_PRC_CI_AS NULL,
	CONSTRAINT test_pk PRIMARY KEY (id)
);
INSERT INTO test.dbo.test (name,remark,id) VALUES
	 (N'柯基',N'这是sqlserver数据库',1);

在这里插入图片描述

2 SpringBoot依赖引入

2.1 准备工作

首先需要一个已经创建好可用的SpringBoot项目工程,且已经安装MybatisX插件(自动化生成mapper、xml等文件)
单体架构工程创建请参考:Springboot创建Mave聚合工程(可灵活创建任意版本)
微服务工程创建请参考:SpringCloud微服务聚合工程创建指南

环境准备

  1. jdk1.8
  2. SpringBoot2.7.18
  3. MySQL5.7.44
  4. SqlServer2012
  5. JetBrains IDEA2023.3
  6. MyBatis-Plus 3.5.0
2.2 添加相关的pom文件依赖

在根目录的pom文件中引入如下依赖

<properties>
    <dynamic-ds.version>3.5.2</dynamic-ds.version>
    <mybatis-plus.version>3.5.4</mybatis-plus.version>
    <mysql.version>8.0.33</mysql.version>
    <sqlserver.version>12.4.2.jre8</sqlserver.version>
</properties>            
<dependencyManagement>
	<dependencies>
        <!-- dynamic-datasource 多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-ds.version}</version>
        </dependency>

        <!-- mybatis-plus  -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!-- SqlServer -->
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
             <version>${sqlserver.version}</version>
         </dependency>
    </dependencies>
</dependencyManagement>

在common模块中引入对应的依赖项

 <dependencies>  
    <!-- dynamic-datasource 多数据源-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    </dependency>

    <!-- mybatis-plus  -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
    </dependency>
 </dependency>

在需要执行数据库连接的服务加入mysql、sqlserver依赖驱动,例如此处使用file文件服务做示例
在这里插入图片描述

    <dependencies>
        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- SqlServer -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
        </dependency>

    </dependencies>

注意:以上依赖项为微服务架构引入示例,如果使用单体架构的项目根据需要直接一次性引入所有上述依赖效果一致

2.3 application.yml文件配置
mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  global-config:
    db-config:
      id-type: assign_id
    banner: false
    
--- # 数据源配置
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为 master
      primary: master
      # 严格模式 匹配不到数据源则报错
      strict: true
      datasource:
        # 主库数据源
        master:
          type: ${spring.datasource.type}
          driverClassName: com.mysql.cj.jdbc.Driver
          # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
          url: jdbc:mysql://192.168.3.220:3306/jialiangkj-pet?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
          username: root
          password: lvdamaoluguo
        # 从库数据源
        slave:
          lazy: true
          type: ${spring.datasource.type}
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.88.170:3306/jialiangkj-pet-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
          username: root
          password: lvdamaoluguo

        sqlserver:
          type: ${spring.datasource.type}
          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
          url: jdbc:sqlserver://localhost:1433;DatabaseName=test;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
          username: sa
          password: lvdamaoluguo
      hikari:
        # 最大连接池数量
        maxPoolSize: 20
        # 最小空闲线程数量
        minIdle: 10
        # 配置获取连接等待超时的时间
        connectionTimeout: 30000
        # 校验超时时间
        validationTimeout: 5000
        # 空闲连接存活最大时间,默认10分钟
        idleTimeout: 600000
        # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
        maxLifetime: 1800000
        # 多久检查一次连接的活性
        keepaliveTime: 30000
2.4 添加mapper包扫描

在Application启动类,添加启动扫描mapper包

@MapperScan(basePackages = "cn.com.jialiangkj.file.mapper") // 此处填写需要扫描的包路径

在这里插入图片描述

3 MyBatisPlus持久化文件自动引入

请参考文章快速自动化引入:Springboot快速生成Mapper、Xml、Pojo、Service的神器MyBatisX

4 多数据源使用

4.1 在controller层使用

在controller包下创建一个TestController控制器类,并引入以下代码

@RestController
@RequestMapping("/file")
@RequiredArgsConstructor
public class TestController {

    private final TestService testService;
    @GetMapping("/hello")
    public String hello(){
        return "Hello World!";
    }

    @GetMapping("/mysql_master")
    public R mysqlMaster(){
        TestEntity testEntity = testService.getById(1);
        return R.ok(testEntity);
    }

    @DS("slave")
    @GetMapping("/mysql_slave")
    public R mysqlSlave(){
        TestEntity testEntity = testService.getById(1);
        return R.ok(testEntity);
    }

    @DS("sqlserver")
    @GetMapping("/sql_server")
    public R sqlServer(){
        TestEntity testEntity = testService.getById(1);
        return R.ok(testEntity);
    }
}

注意:如果项目中没有已经封装好的返回数据对象R类,那么可以使用print对返回结果的类进行tostring打印即可,或者打断点进入调试模式查看查询返回结果。

查询mysql主库mysql_master结果
在这里插入图片描述
查询mysql从库mysql_slave结果
在这里插入图片描述

询sqlserver数据库sql_server结果
在这里插入图片描述

4.2 在service层使用

在TestService添加测试接口函数

public interface TestService extends IService<TestEntity> {
    /**
     * 获取主MySQL数据库中的TestEntity实体。
     *
     * @return 从主MySQL数据库中获取的TestEntity实例。
     */
    public TestEntity getTestMysqlMaseter();

    /**
     * 获取从MySQL数据库中的TestEntity实体。
     *
     * @return 从MySQL从库中获取的TestEntity实例。
     */
    public TestEntity getTestMysqlSalve();

    /**
     * 获取SQL Server数据库中的TestEntity实体。
     *
     * @return 从SQL Server数据库中检索到的TestEntity实例。
     */
    public TestEntity getTestSqlServer();

}

在TestServiceImpl添加实现测试函数

@Service
@RequiredArgsConstructor
public class TestServiceImpl extends ServiceImpl<TestMapper, TestEntity>
    implements TestService {

    private final TestMapper testMapper;

    @DS("master")
    public TestEntity getTestMysqlMaseter() {
        return testMapper.selectById(1);
    }
    @DS("slave")
    public TestEntity getTestMysqlSalve() {
        return testMapper.selectById(1);
    }
    @DS("sqlserver")
    public TestEntity getTestSqlServer() {
        return testMapper.selectById(1);
    }
}

修改TestController控制器类代码,调用impl对应方法进行测试

@RestController
@RequestMapping("/file")
@RequiredArgsConstructor
public class TestController {

    private final TestService testService;
    @GetMapping("/hello")
    public String hello(){
        return "Hello World!";
    }

    @GetMapping("/mysql_master")
    public R mysqlMaster(){
        TestEntity testEntity = testService.getTestMysqlMaseter();
        System.out.println(testEntity.toString());
        return R.ok();
    }

    @GetMapping("/mysql_slave")
    public R mysqlSlave(){
        TestEntity testEntity = testService.getTestMysqlSalve();
        System.out.println(testEntity.toString());
        return R.ok();
    }

    @GetMapping("/sql_server")
    public R sqlServer(){
        TestEntity testEntity = testService.getTestSqlServer();
        System.out.println(testEntity.toString());
        return R.ok();
    }
}

打开浏览器或者使用apifox等接口工具,发送对应的get请求,可以在控制台看到已经执行对应数据库的查询
在这里插入图片描述

总结:经过上述演示,我们已经实现了在springboot项目中实现多数据库源的连接和操作,如果需要使用不同数据库,按照上述操作思路即可实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于NVIDIA NIM 平台的知识问答系统实现客服功能

前言&#xff1a; NVIDIA联合CSDN推出了《NVIDIA NIM黑客松训练营》&#xff0c;通过对着提供的实验手册&#xff0c;学习了基于NVIDIA的NIM平台知识问答系统&#xff0c;简单的一段代码就可以实现一个AI智能问答系统。而且这次活动注册账号即可获得到免费的1000tokens&#x…

(12)时间序列预测之MICN(CNN)

文章目录 前言1. challenge 一、网络结构1. MHDecomp2. Trend-cyclical Prediction Block3. Seasonal Prediction BlockMIC LayerMerge 实验结果1.长时预测 总结参考 文章信息 模型&#xff1a; MICN (Multi-scale Isometric Convolution Network)关键词&#xff1a; 长时预测…

设计模式——Facade(门面)设计模式

摘要 本文介绍了外观设计模式&#xff0c;这是一种通过简单接口封装复杂系统的设计模式。它简化了客户端与子系统之间的交互&#xff0c;降低了耦合度&#xff0c;并提供了统一的调用接口。文章还探讨了该模式的优缺点&#xff0c;并提供了类图实现和使用场景。 1. 外观设计模…

opencv-android编译遇到的相关问题处理

1、opencv-android sdk下载 下载地址&#xff1a;https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细&#xff0c;大家可安装官方给出的步骤导入。…

go语言读取yaml配置文件内容

1、config.yaml配置文件内容假设如下 name: "example" version: 1.0 settings:timeout: 30debug: truefeatures:- feature1- feature22、定义结构体 go语言定义结构体匹配yaml内容 package mainimport ("fmt""log""os""gopkg.…

STL算法之其它算法_下

random_shuffle 这个算法将[first,last)的元素次序随机排列。也就说&#xff0c;在N!中可能的元素排列中随机选出一种&#xff0c;此处N为last-first。 N个元素的序列&#xff0c;其排列方式为N!中&#xff0c;random_shuffle会产生一个均匀分布&#xff0c;因此任何一个排列被…

模拟简单的iOT工作流

没有实际接触过iOT的流程&#xff0c;应该实际使用比这个接口返回要复杂&#xff0c;只是演示~希望能参与实际的接口接入&#xff0c;而不是只展示个假数据。 启动RabbitQ 使用的是3.8.5 启动命令 RabbitMQ Service - start RabbitMQ Command Prompt rabbitmqctl start_app …

【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件 六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL 十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 ~~ 约定 ~~ 在…

关于线扫相机的使用和注意事项

引言 线扫相机作为工业视觉系统中的核心设备之一&#xff0c;以其高分辨率和高速成像的特点被广泛应用于印刷质量检测、电子元件检测、纺织品缺陷检测等领域。本文从线扫相机的基本原理出发&#xff0c;探讨其使用方法&#xff0c;并总结在实际应用中的注意事项&#xff0c;为…

MybatisPlus字段类型处理器TypeHandler

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 简介 官网&#xff1a;字段类型处理器 在 MyBatis 中&#xff0c;类型处理器&#xff08;TypeHandle…

c++编译版本问题#error C++17 or later compatible compiler is required to use xx

问题解决方向 网上多数给出的解决方法是找到setup.py&#xff0c;然后修改extra_compile_args参数中的cxx&#xff0c;由-stdc14改为-stdc17&#xff0c;但是这个方法在我这里没用。 所以我重新理解了下这个error&#xff0c;应该是说为了编译安装当前的库&#xff0c;需要的…

【AI大模型】大型语言模型LLM基础概览:技术原理、发展历程与未来展望

目录 &#x1f354; 大语言模型 (LLM) 背景 &#x1f354; 语言模型 (Language Model, LM) 2.1 基于规则和统计的语言模型&#xff08;N-gram&#xff09; 2.2 神经网络语言模型 2.3 基于Transformer的预训练语言模型 2.4 大语言模型 &#x1f354; 语言模型的评估指标 …

一文理解多模态大语言模型——下

作者&#xff1a;Sebastian Raschka 博士&#xff0c; 翻译&#xff1a;张晶&#xff0c;Linux Fundation APAC Open Source Evangelist 编者按&#xff1a;本文并不是逐字逐句翻译&#xff0c;而是以更有利于中文读者理解的目标&#xff0c;做了删减、重构和意译&#xff0c…

uC/OSII学习笔记(二)任务的堆栈检验

加入OSTaskCreateExt()创建拓展任务函数的使用。 加入OSTaskStkChk()堆栈检验函数的使用。 堆栈检验函数可检查任务堆栈的使用字节数量和空闲字节数量。 具体使用方法如下&#xff1a; 1.创建拓展任务OSTaskCreateExt()用于堆栈检验&#xff0c;堆栈检验必须用拓展任务OSTaskCr…

WPF+LibVLC开发播放器-进度条显示和拖动控制

进度条显示和拖动控制 视频教程界面上代码实现进度条显示进度进度条拖动视频进度 效果 视频教程 WPFLibVLC开发播放器-进度条控制 界面上 界面上线增加一个Slider控件&#xff0c;当做播放进度条 <SliderName"PlaySlider"Grid.Row"1"Width"800&qu…

【Rust WebAssembly 入门实操遇到的问题】

Rust WebAssembly 入门实操遇到的问题 什么是WebAssembly跟着教程走wasm-pack build error总结 什么是WebAssembly WebAssembly&#xff08;简称Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令 格式。Wasm 被设计为编程语言的可移植编译目标&#xff0c;支持在 Web 上部…

同为科技(TOWE)柔性定制化PDU插座

随着科技的进步&#xff0c;越来越多的精密电子设备&#xff0c;成为工作生活密不可分的工具。 电子电气设备的用电环境也变得更为复杂&#xff0c;所以安全稳定的供电是电子电气设备的生命线。 插座插排作为电子电气设备最后十米范围内供配电最终核心部分&#xff0c;便捷、安…

AI RPA 影刀基础教程:开启自动化之旅

RPA 是什么 RPA 就是机器人流程自动化&#xff0c;就是将重复的工作交给机器人来执行。只要是标准化的、重复的、有逻辑行的操作&#xff0c;都可以用 RPA 提效 准备 安装并注册影刀 影刀RPA - 影刀官网 安装 Chrome 浏览器 下载链接&#xff1a;Google Chrome 网络浏览器 …

HTTP 长连接(HTTP Persistent Connection)简介

HTTP长连接怎么看&#xff1f; HTTP 长连接&#xff08;HTTP Persistent Connection&#xff09;简介 HTTP 长连接&#xff08;Persistent Connection&#xff09;是 HTTP/1.1 的一个重要特性&#xff0c;它允许在一个 TCP 连接上发送多个 HTTP 请求和响应&#xff0c;而无需为…

VS与SQL Sever(C语言操作数据库)

作者这里使用的是程序是&#xff1a; Visual Studio SQL Sever (1 对VS的操作 1.首先我们打开Visual Studio Installer&#xff0c;并以管理员身份运行 2.点击修改 3.先选择数据存储和处理&#xff0c;再在右方添加处理工具&#…