Spring Boot入门(20):轻松搞定多数据源配置,Spring Boot与Mybatis-Plus的完美结合!

前言

本文将介绍如何在Spring Boot框架下使用mybatis-plus实现多数据源配置。多数据源配置是一个常见的需求,在实际项目中也经常遇到,因此掌握多数据源配置的技巧是非常重要的。

摘要

本文将为大家介绍如何使用Spring Boot和mybatis-plus实现多数据源配置。我们将分别介绍如何配置多个数据源以及如何使用mybatis-plus来操作这些数据源。除此之外,我们还将给出一个简单的测试用例来验证代码的正确性。

正文

添加依赖和配置文件

首先,我们需要在pom.xml文件中添加依赖:

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

配置多个数据源

在Spring Boot框架下配置多个数据源只需要在application.properties文件中加入多组数据源的配置即可。例如,我们配置两个数据源,分别为db1和db2:

spring:datasource:dynamic:primary: master #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:master:driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456slave_1:driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置url: jdbc:mysql://127.0.0.1:3306/test_db2?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456

在以上配置中,我们为两个数据源分别配置了url、username和password。需要注意的是,我们在url中使用了不同的数据库名称来区分不同的数据源。

示例截图如下:
在这里插入图片描述

配置mybatis-plus

在配置mybatis-plus上,我们需要创建两个数据源的配置类,分别为db1和db2。这两个配置类需要分别继承AbstractDataSourceConfig,并且需要通过使用@MapperScan注解来初始化mybatis-plus的SqlSessionFactory和MapperScannerConfigurer。

我们这里给出db1数据源的代码示例:

@Configuration
@MapperScan(basePackages = {"com.example.db1.mapper"}, sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1DataSourceConfig extends AbstractDataSourceConfig {@Autowired@Qualifier("db1DataSource")private DataSource db1DataSource;@Bean(name = "db1SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {return super.createSqlSessionFactory(dataSource);}@Bean(name = "db1SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}@Overridepublic DataSource dataSource() {return db1DataSource;}@Overridepublic MybatisPlusProperties getMybatisPlusProperties() {MybatisPlusProperties properties = new MybatisPlusProperties();properties.setMapperLocations(new String[]{"classpath:mapper/db1/**/*.xml"});return properties;}
}

在以上代码中,我们使用@MapperScan注解来扫描指定目录下的Mapper接口,同时指定SqlSessionTemplate使用的SqlSessionFactory名称(即“db1SqlSessionFactory”)。我们在配置中也指定了Mapper文件的路径。

类似地,在db2数据源的配置中,我们只需要修改相关的名称即可。

编写Mapper接口

在编写Mapper接口时,我们需要指定使用的数据源。我们可以通过在Mapper接口上加上@DS注解来指定当前执行的方法使用的数据源。例如:

@DS("db1")
public interface UserMapperDb1 extends BaseMapper<User> {//...
}@DS("db2")
public interface UserMapperDb2 extends BaseMapper<User> {//...
}

以上代码中,我们分别为db1和db2数据源编写了一个UserMapper接口,并通过@DS注解指定了使用的数据源。

测试用例

最后,我们为我们的代码编写一个简单的测试用例来验证代码的正确性。我们可以在测试用例中通过使用@Autowired注入指定的Mapper接口来操作对应的数据源。例如:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MultiDataSourceTest {@Autowiredprivate UserMapperDb1 userMapperDb1;@Autowiredprivate UserMapperDb2 userMapperDb2;@Testpublic void test() {User user1 = new User();user1.setName("张三");user1.setAge(18);userMapperDb1.insert(user1); // 保存至db1User user2 = new User();user2.setName("李四");user2.setAge(20);userMapperDb2.insert(user2); // 保存至db2List<User> userList1 = userMapperDb1.selectList(null);List<User> userList2 = userMapperDb2.selectList(null);Assert.assertEquals(userList1.size(), 1); // db1中应有1条记录Assert.assertEquals(userList2.size(), 1); // db2中应有1条记录}
}

在以上测试用例中,我们使用了两个Mapper接口来分别向db1和db2数据源中插入了一条记录,并在之后使用了两个Mapper接口来查询各自的数据源中的记录条数。

全文小结

本文介绍了如何在Spring Boot框架下使用mybatis-plus实现多数据源配置。具体地,我们分别说明了如何配置多个数据源、如何配置mybatis-plus以及如何编写Mapper接口和测试用例。实践证明,多数据源配置在实际业务场景中非常常见,通过本文的学习,读者可以掌握多数据源配置的技巧,对于日后的项目开发工作也将会有很大的帮助。

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

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

相关文章

路由过滤,策略实验

1配置ip [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 100.1.1.1 24 [r1-GigabitEthernet0/0/0]int l0 [r1-LoopBack0]ip add 192.168.0.1 32 [r1-LoopBack0]int l1 [r1-LoopBack1]ip add 192.168.1.1 32 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 100.1.1.2 24 [r…

自动化测试的三种测试报告模板

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

java中多线程的创建方式及常用的方法

目录 概述 继承Thread类&#xff1a; 实现Runnable接口&#xff1a; 实现Callable接口&#xff1a; 示例代码 继承Thread类示例 实现Runnable接口示例 实现Callable接口示例 调用三种线程测试示例 线程常用的成员方法 概述 常见的创建线程的方式包括&#xff1a;继承…

Axure糖尿病健康管理APP原型图,医疗保健血糖监测饮食控制

作品概况 页面数量&#xff1a;共 50 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 应用领域&#xff1a;医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图&#xff0c;设计规范内容清晰…

浏览器跨标签页通信的方式都有哪些

跨标签页的实际应用场景&#xff1a; 1. 共享登录状态&#xff1a; 用户登录后&#xff0c;多个标签页中需要及时获取到登录状态&#xff0c;以保持一致的用户信息。这种情况&#xff0c;可以使用浏览器的 localStorage 或者 sessionStorage 来存储登录状态&#xff0c;并通过…

difflib 标准库详解:Python 文本对比的利器

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 difflib 模块是 Python 标准库中的一个模块&#xff0c;用于比较文本之间的差异。它提供了一些函数和类&#xff0c;可以帮助你找到两个字符串或列表之间的…

“傻瓜”学计量——核密度估计KDE

提纲&#xff1a; 什么是核密度估计&#xff0c;是干什么的 代码 1 前言 参数估计vs非参数估计参数估计是样本数据来自一个具有明确概率密度函数的总体。非参数估计是样本数据的概率分布未知&#xff0c;这时&#xff0c;为了对样本数据进行建模&#xff0c;需要估计样本数据…

进阶C语言-文件操作

文件操作 &#x1f388;1.为什么使用文件&#x1f388;2.什么是文件&#x1f52d;2.1程序文件&#x1f52d;2.2数据文件&#x1f52d;2.3文件名 &#x1f388;3.文件的打开和关闭&#x1f52d;3.1文件指针&#x1f52d;3.2文件的打开和关闭 &#x1f388;1.为什么使用文件 ✅ 我…

标准解读|美国纽扣硬币电池新规UL 4200A-2023标准详解

深度解析美国新纽扣电池安全标准UL4200A-关注儿童安全,推动全行业提升 近年来,儿童不慎吞咽纽扣电池并导致严重伤害甚至死亡的事故时有发生,引起社会高度关注。为了降低此类安全隐患,美国权威安全认证机构UL于发布了新的纽扣电池安全标准UL 4200A,对相关电池和产品提出了更严格…

Java精品项目--第8期基于SpringBoot的宠物用品商城的设计分析与实现

项目使用技术栈 SpringBootThymeleafMyBatisMySQLAopJavajdk1.8 项目介绍 项目截图

今日arXiv最热NLP大模型论文:浙江大学:蒸一蒸,多Agent变成单一模型,效果更好

“团结就是力量”&#xff0c;面对复杂多变的现实环境&#xff0c;multi-agent应运而生。相较于单打独斗的single-agent&#xff0c;multi-agent集结了多个功能各异的LLM&#xff0c;共同攻克难关。然而&#xff0c;这种协同作战的方式也带来了沉重的推理负担&#xff0c;限制了…

500道Python毕业设计题目推荐,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

React自定义Hook函数:高效组件开发的秘密武器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

ZISUOJ 数据结构--队列及其应用

说明&#xff1a; 基本都是bfs的常见模板题型&#xff0c;思路都很直接&#xff0c;不过后面有两道题很搞心态&#xff0c;它们给的坐标x、y是反的&#xff0c;导致刚开始一直错。题目还是要看仔细&#xff0c;不能先入为主。 题目列表&#xff1a; 问题 A: 围圈报数(完善程序…

快速部署stable diffusion@Ubuntu

Stable Diffusion可以根据文本描述生成相关的图像&#xff0c;是当前最热门的文生图模型。 在Ubuntu下&#xff0c;可以选择快速安装&#xff0c;或者手动一步步安装。 快速安装 使用文档中的方法&#xff0c;先下载一个sh文件&#xff0c;然后执行这个文件&#xff0c;就自动…

就业班 第三阶段(负载均衡) 2401--4.19 day3 nginx3

二、企业 keepalived 高可用项目实战 1、Keepalived VRRP 介绍 keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件&#xff0c;用来防止单点故障。 ​ keepalived工作原理keepalived是以VRRP协议为实现基础的&#xff0c;VRRP全称Virtual Router Redundan…

乐鑫科技收购创新硬件公司 M5Stack 控股权

乐鑫科技 (688018.SH) 宣布收购 M5Stack&#xff08;明栈信息科技&#xff09;的控股权。这一战略举措对于物联网和嵌入式系统领域的两家公司来说都是一个重要的里程碑&#xff0c;也契合了乐鑫和 M5Stack 共同推动 AIoT 技术民主化的愿景。 M5Stack 以其创新的硬件开发方式而闻…

SpringCloud系列(9)--将服务消费者Consumer注册进Eureka Server

前言&#xff1a;上一章节我们介绍了如何将服务提供者注册进Eureka服务里&#xff0c;本章节则介绍如何将服务消费者Consumer注册进Eureka服务里 Eureka架构原理图 1、修改consumer-order80子模块的pom.xml文件&#xff0c;引入Eureka Clinet的依赖&#xff0c;然后reolad一下&…

VSCode的C/C++开发 ===> Windows

一、开发环境搭建 安装mingw-w64编译器(GCC for Windows 64 & 32 bits)、Cmake工具(选装) VSCode插件安装 C/C cmake cmake tools 二、代码实践演练 基于g命令 g编译单文件&#xff0c;生成带调试信息的可执行文件、并调试 g -g main.cpp -o my_single_swap g编译多文件…

element plus 布局 代码没反应 样式并未生效

就是这样深深浅浅的颜色不显示&#xff0c;整个页面都是白的。 因为网页上示例代码中没有 添加grid-content ep-bg-purple-dark 等相关颜色的样式 在element plus的github中有相关代码&#xff0c;这里可以找到颜色样式 element-plus/docs/examples/layout/index.scss at de…