当前位置: 首页 > news >正文

【SpringBoot】mybaitsPlus的多数据源配置

       📝个人主页:五敷有你      


 🔥系列专栏:SpringBoot
 

⛺️稳重求进,晒太阳

mybatisPlus的多数据源配置

适用于多种场景:纯粹多库、   读写分离、    一主多从、   混合模式等

目前我们就来模拟一个纯粹多库的一个场景,其他场景类似

场景说明:

我们创建两个库,分别为:  mybatis_plus(以前的库不动)与mybatis_plus_1  (新建),将

mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例 分别获取用户数据与商品数据,如果获取到说明多库模拟成功

1、创建数据库及表

创建数据库mybatis_plus_1和表product

CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use `mybatis_plus_1`;
CREATE TABLE product
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称 ',
price INT(11) DEFAULT 0 COMMENT '价格 ',
version INT(11) DEFAULT 0 COMMENT '乐观锁版本号 ',
PRIMARY KEY (id));

添加测试数据

INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本 ', 100);

删除mybatis_plus库product表

use mybatis_plus; DROP TABLE IF EXISTS product;

2、引入依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>

3、配置多数据源

说明:注释掉之前的数据库连接,添加新配置

spring:
# 配置数据源信息
datasource:
dynamic:
# 设置默认的数据源或者数据源组 ,默认值即为master
primary: master
# 严格匹配数据源 ,默认false.true未匹配到指定数据源时抛异常 ,false使用默认数据源
strict: false
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf- 8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave_1:
url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf- 8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456

4、创建用户service

@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements  UserService {
}

5、创建商品service

@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements  ProductService {
}

6、测试

@Autowired
private UserService userService;
@Autowired
private ProductService  productService;@Test
public void testDynamicDataSource(){
System.out.println(userService.getById(1L));
System.out.println(productService.getById(1L));
}

结果:

1、都能顺利获取对象,则测试成功

2、如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源,自动切换,是不是就能实现读写分离?

注意事项

可以设置默认的数据源或者数据源组 ,默认值即为master
# strict:严格匹配数据源 ,默认false。true未匹配到指定数据源时抛异常 ,false使用默认数据源
如下,
二者都没有使用@DS("数据源名称"),就是没有数据源,当为false时,就是会默认使用master,所以报错是mybatis_plus.t_product不存在,而不是数据源错误。
当为true时,就严格@DS中的数据源,没有就报错

相关文章:

【SpringBoot】mybaitsPlus的多数据源配置

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 mybatisPlus的多数据源配置 适用于多种场景&#xff1a;纯粹多库、 读写分离、 一主多从、 混合模式等 目前我们就来模拟一个纯粹多…...

安卓Java面试题 1-10

&#x1f525; 1、简述Android的4大组件是哪些&#xff0c;它们的作用&#xff1f;&#x1f525; Android的4大组件 1&#xff1a;Activity&#xff1a;Activity是Android程序与用户交互的窗口&#xff0c;是Android构造块中最基本的一种&#xff0c;它需要为保持各界面的状态…...

强化学习中动作价值函数和状态价值函数的联系区别?

在强化学习中&#xff0c;动作价值函数&#xff08;Q函数&#xff09;和状态价值函数&#xff08;V函数&#xff09;都是值函数&#xff0c;用于评估在不同状态或状态动作对下的值。它们之间存在联系&#xff0c;但有一些区别&#xff1a; 动作价值函数&#xff08;Q函数&#…...

Vue-Router路由介绍和使用

vue属于单页面应用&#xff0c;路由就是根据浏览器路径不同&#xff0c;用不同的试图组件替换这个页面内容 开启路由功能 如图在创建项目时候勾选rouler 这样创建好的项目就有路由功能 下一步 不同的访问路径 展示不同的页面内容 路由配置 路由连接组件 浏览器会解析为超链接 …...

Waves 14 Complete:后期混音效果全套插件,打造专业级音质体验

Waves 14 Complete&#xff0c;这款专为Mac和Windows平台打造的后期混音效果全套插件&#xff0c;将为您的音乐创作之旅增添一抹亮色。Waves 14 Complete以其丰富的功能和出色的性能&#xff0c;赢得了众多音乐制作人的青睐。它集合了众多高质量的音频处理插件&#xff0c;涵盖…...

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为&#xff1a;https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式&#xff0c;都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip&#xff1a;192.16…...

个人项目介绍4:三维园区篇

个人项目介绍: 地图铁路线路篇 地球卫星篇 火车站篇 三维园区篇 项目需求&#xff1a; 1.按比例全景显示三维园区 2.精确显示园区内设备设施 3.实时显示设备报警信息 4.显示园区内摄像监控设备&#xff0c;并可点击显示监控视频流 5.显示园区内的重大危险源和风险分布 …...

哪些公司在招聘GIS开发?为什么?

之前我们给大家整理汇总了WebGIS在招岗位的一些特点&#xff0c;包括行业、学历、工作经验等。WebGIS招聘原来看重这个&#xff01;整理了1300多份岗位得出来的干货&#xff01; 很多同学好奇&#xff0c;这些招GIS开发的都是哪些公司&#xff1f;主要是做什么的&#xff1f; …...

电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题

xinput1_3.dll文件是一个Windows操作系统中的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它是微软DirectX软件开发包的一部分&#xff0c;主要用于支持游戏控制器和其他输入设备的交互。这个文件是DirectInput API的一个组件&#xff0c;DirectInput是DirectX中处理…...

电商数据分析15——电商平台上的产品推荐系统优化策略

目录 写在开头1. 产品推荐系统的作用1.1 提升用户购物体验1.2 增加销售额和转化率 2. 数据分析在推荐系统中的应用2.1 用户行为数据分析2.2 个性化推荐算法优化2.3 多样性和新颖性的平衡 3. 推荐系统优化的实践案例3.1 案例分享&#xff1a;利用机器学习提升推荐准确度3.1.1. 背…...

华硕AMD主板开启TPM2.0支持

目录 配置问题设置开启 Firmware TPM开启 Security Device Support保存设置 检查 配置 主板&#xff1a;TUF Gaming B550m-e Wifi   BIOS: 3402 问题 今天更新Win11&#xff0c;告诉我不支持 TPM 2.0&#xff0c;导致更新失败。   网上搜这个问题&#xff0c;基本只提供了…...

Linux - 进程控制

1、进程创建 1.1、fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程&#xff1b; #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进…...

redis一些概念知识

一、redis是什么 Redis是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它主要以键值对存储数据。与传统的关系型数据库相比&#xff0c;Redis更注重内存操作和高性能&#xff0c;常被用作缓存系统或分布式存储系统。 以简单的比喻来解释Redis&#xff0c;可以…...

01.AJAX 概念和 axios 使用

01.AJAX 概念和 axios 使用 1. 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿…...

外包干了一周,技术明显倒退。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…...

JSON数据格式,后台@RequestBody实体类接收不到数据-首字母小写,第二个字母大写造成的参数问题

原因&#xff1a; 1.驼峰模式出问题了&#xff0c;当驼峰前只有一个小写字母&#xff0c;然后后面是大写字母&#xff0c;就会出现接收不到数据的情况。 2.只有一个首字母大写的字段也会失效。 比如参数&#xff1a;aTest 那么后端实体定义的aTest接收不到该参数值&#xff…...

MySQL——性能调优

性能调优&#xff08;重要&#xff09; SQL 优化的目的 减少磁盘 IO&#xff1a;尽可能避免全表扫描、尽量使用索引、尽量使用覆盖索引减少回表操作减少 CPU 和内存的消耗&#xff0c;尽可能减少排序、分组、去重之类的操作&#xff0c;尽量减少事务持有锁的时间 优化途径&…...

Java中super关键字作用及解析

在 Java 中&#xff0c;super关键字主要有以下作用&#xff1a; 在子类构造方法中调用父类的构造方法&#xff1a;使用super关键字可以在子类的构造方法中显式调用父类的构造方法&#xff0c;以便继承父类的属性和行为。语法如下&#xff1a;这样可以确保父类的构造方法被正确…...

【LeetCode打卡】Day25|216.组合总和III、17.电话号码的字母组合

学习目标&#xff1a; 216.组合总和III 17.电话号码的字母组合 学习内容&#xff1a; 216.组合总和III 题目链接 &&文章讲解 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回所有可能的有效…...

JS函数

目录 1.Function声明 2.匿名函数 3.函数表达式 4.箭头函数 5.构造函数 个人版JS函数使用&#xff1a; 函数的声明&#xff1a;函数如果有return则返回的是 return 后面的值&#xff0c;如果函数没有有return 声明方式一&#xff1a; 声明方式二&#xff1a;变量名声明…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...