SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)
SpringBoot连接多数据源MySQL、SqlServer等MyBatisPlus测试在实际的项目开发中我们往往需要同时连接多个数据源对数据进行处理。本文将详细介绍在SpringBoot下配合MybatisPlus如何连接多数据源实例将会使用连接MySQL、SqlServer进行测试可自行根据思路供自行连接Oracle、PostgreSQL等数据库。1 创建需要的数据库和数据1.1准备工作需要准备至少两台以上安装有mysql或sqlserver其他数据库的服务器便于后续测试例如已经在服务器上安装好以下数据库MySQL版本 5.7.44SqlServer版本 20121.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微服务聚合工程创建指南环境准备jdk1.8SpringBoot2.7.18MySQL5.7.44SqlServer2012JetBrains IDEA2023.3MyBatis-Plus 3.5.02.2 添加相关的pom文件依赖在根目录的pom文件中引入如下依赖properties dynamic-ds.version3.5.2/dynamic-ds.version mybatis-plus.version3.5.4/mybatis-plus.version mysql.version8.0.33/mysql.version sqlserver.version12.4.2.jre8/sqlserver.version /properties dependencyManagement dependencies !-- dynamic-datasource 多数据源-- dependency groupIdcom.baomidou/groupId artifactIddynamic-datasource-spring-boot-starter/artifactId version${dynamic-ds.version}/version /dependency !-- mybatis-plus -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version${mybatis-plus.version}/version /dependency !-- mysql 驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version${mysql.version}/version /dependency !-- SqlServer -- dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-jdbc/artifactId version${sqlserver.version}/version /dependency /dependencies /dependencyManagement在common模块中引入对应的依赖项dependencies !-- dynamic-datasource 多数据源-- dependency groupIdcom.baomidou/groupId artifactIddynamic-datasource-spring-boot-starter/artifactId /dependency !-- mybatis-plus -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId /dependency /dependency在需要执行数据库连接的服务加入mysql、sqlserver依赖驱动例如此处使用file文件服务做示例dependencies !-- mysql 驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId /dependency !-- SqlServer -- dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-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?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8autoReconnecttruerewriteBatchedStatementstrue 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?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8autoReconnecttruerewriteBatchedStatementstrue username: root password: lvdamaoluguo sqlserver: type: ${spring.datasource.type} driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;DatabaseNametest;SelectMethodcursor;encryptfalse;rewriteBatchedStatementstrue username: sa password: lvdamaoluguo hikari: # 最大连接池数量 maxPoolSize: 20 # 最小空闲线程数量 minIdle: 10 # 配置获取连接等待超时的时间 connectionTimeout: 30000 # 校验超时时间 validationTimeout: 5000 # 空闲连接存活最大时间默认10分钟 idleTimeout: 600000 # 此属性控制池中连接的最长生命周期值0表示无限生命周期默认30分钟 maxLifetime: 1800000 # 多久检查一次连接的活性 keepaliveTime: 300002.4 添加mapper包扫描在Application启动类添加启动扫描mapper包MapperScan(basePackages cn.com.jialiangkj.file.mapper) // 此处填写需要扫描的包路径3 MyBatisPlus持久化文件自动引入请参考文章快速自动化引入Springboot快速生成Mapper、Xml、Pojo、Service的神器MyBatisX4 多数据源使用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 IServiceTestEntity { /** * 获取主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 ServiceImplTestMapper, 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项目中实现多数据库源的连接和操作如果需要使用不同数据库按照上述操作思路即可实现。

相关新闻

ChatGLM3-6B在电商场景的创新应用:智能客服与推荐系统

ChatGLM3-6B在电商场景的创新应用:智能客服与推荐系统

ChatGLM3-6B在电商场景的创新应用:智能客服与推荐系统 1. 引言 电商平台每天面临海量用户咨询和商品推荐需求,传统人工客服成本高、响应慢,而通用推荐算法往往缺乏个性化深度。ChatGLM3-6B作为新一代开源对话模型,不仅能理解复杂…

2026/5/17 10:39:47 阅读更多 →
丹青幻境·Z-Image Atelier参数详解:画布幅宽、机缘Seed与避讳设置全解析

丹青幻境·Z-Image Atelier参数详解:画布幅宽、机缘Seed与避讳设置全解析

丹青幻境Z-Image Atelier参数详解:画布幅宽、机缘Seed与避讳设置全解析 1. 丹青幻境:数字艺术创作新体验 丹青幻境Z-Image Atelier是一款基于Z-Image架构与Cosplay LoRA技术打造的数字艺术创作工具。它摒弃了传统AI工具的技术感,将强大的计…

2026/7/8 7:44:11 阅读更多 →
告别复杂配置!图图的嗨丝造相-Z-Image-Turbo开箱即用,快速体验AI渔网袜生成

告别复杂配置!图图的嗨丝造相-Z-Image-Turbo开箱即用,快速体验AI渔网袜生成

告别复杂配置!图图的嗨丝造相-Z-Image-Turbo开箱即用,快速体验AI渔网袜生成 1. 引言:你的专属AI风格画师,一键启动 还在为生成一张特定风格的人物图片而烦恼吗?想创作一张穿着精致渔网袜的角色图,用通用模…

2026/7/7 2:45:23 阅读更多 →

最新新闻

pyrDown () 与 resize () 核心区别(OpenCV)

pyrDown () 与 resize () 核心区别(OpenCV)

pyrDown () 与 resize () 核心区别(OpenCV) 一、函数基础作用 1. pyrDown 高斯金字塔下采样(图像缩小专用) cpp 运行 void pyrDown(InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT);固定逻辑: 先对原图做55 高…

2026/7/8 16:43:15 阅读更多 →
NBM7100A芯片在低功耗嵌入式设备中的优化应用

NBM7100A芯片在低功耗嵌入式设备中的优化应用

1. 项目背景与核心挑战 在低功耗嵌入式设备设计中,不可充电的初级电池(如CR2032纽扣电池)面临着两大核心挑战:一是高脉冲电流需求导致的电压骤降,二是电池容量利用率低下。以典型的无线传感器节点为例,休眠…

2026/7/8 16:43:15 阅读更多 →
JMeter压测端口枯竭:Windows系统优化与连接复用实战

JMeter压测端口枯竭:Windows系统优化与连接复用实战

1. 项目概述:当JMeter在Windows上“无路可走” 如果你在Windows上用JMeter做性能压测,跑着跑着突然看到控制台疯狂刷出 java.net.BindException: Address already in use: connect 这样的错误,然后线程就开始大量失败,请求成功率…

2026/7/8 16:41:06 阅读更多 →
3分钟完成Windows和Office智能激活:KMS_VL_ALL_AIO完整使用指南

3分钟完成Windows和Office智能激活:KMS_VL_ALL_AIO完整使用指南

3分钟完成Windows和Office智能激活:KMS_VL_ALL_AIO完整使用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗而烦恼?Office功能受限影响工作效率…

2026/7/8 16:38:54 阅读更多 →
静态资源路径穿越漏洞剖析:从原理到防御的完整指南

静态资源路径穿越漏洞剖析:从原理到防御的完整指南

1. 项目概述:一次典型的静态资源路径穿越漏洞剖析最近在梳理开源身份认证项目的安全性时,Casdoor 这个项目引起了我的注意。Casdoor 是 Casbin 开源社区推出的一个基于 OAuth 2.0 / OIDC 的中心化单点登录平台,很多开发者会用它来快速构建自己…

2026/7/8 16:38:54 阅读更多 →
SAST工具深度兼容国标实践:统一漏洞度量与DevSecOps集成

SAST工具深度兼容国标实践:统一漏洞度量与DevSecOps集成

1. 项目概述:当SAST工具遇上国标,我们谈的究竟是什么? 在软件安全开发领域,静态应用程序安全测试(SAST)早已不是什么新鲜词。无论是商业化的Fortify、Checkmarx,还是开源的SonarQube、Semgrep&a…

2026/7/8 16:38:54 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻