【数据库】使用ShardingSphere+Mybatis-Plus实现读写分离
书接上回:数据库调优方案中数据库主从复制,如何实现读写分离
ShardingSphere 实现读写分离的方式是通过配置数据源的方式,使得应用程序可以在执行读操作和写操作时分别访问不同的数据库实例。这样可以将读取操作分发到多个从库(从服务器),从而提高读取性能,同时将写操作发送到主库(主服务器)以确保数据的一致性。
引入依赖
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.1.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql-version}</version></dependency>
配置
# 读写分离配置
spring:shardingsphere:datasource:# 配置真实数据源names: master,slave1,slave2# 配置第 1 个数据源master:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://127.0.0.1:3306/ssopassword: 123456type: com.zaxxer.hikari.HikariDataSourceusername: root# 配置第 2 个数据源slave1:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://127.0.0.1:3306/sso_testpassword: 123456type: com.zaxxer.hikari.HikariDataSourceusername: root# 配置第 3 个数据源slave2:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://127.0.0.1:3306/slave_testpassword: 123456type: com.zaxxer.hikari.HikariDataSourceusername: rootmode:# 内存模式type: Memory# 打印sqlprops:sql-show: truerules:readwrite-splitting:data-sources:myds:# 读数据源负载均衡算法名称load-balancer-name: alg_roundprops:# 读数据源名称,多个从数据源用逗号分隔read-data-source-names: slave1,slave2# 写数据源名称write-data-source-name: master# 读写分离类型,如: Static,Dynamictype: Staticload-balancers:# 定义负载均衡算法:随机,轮询,权重alg_random:type: RANDOMalg_round:type: ROUND_ROBINalg_weight:props:slave1: 1slave2: 2type: WEIGHT
创建数据库表
由于主、从数据库里的数据是一样的,所以sso和sso_test都用下面代码创建sys_business表
CREATE TABLE `sys_business` (`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',`avaliable` TINYINT ( 1 ) DEFAULT '1' COMMENT '是否可用#0:禁用#1:启用',`name` VARCHAR ( 30 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '系统名称',`permission` VARCHAR ( 30 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '权限字符',`path` VARCHAR ( 100 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '路由地址',`icon` VARCHAR ( 30 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图表',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`delete_flag` TINYINT ( 1 ) DEFAULT '1' COMMENT '是否删除#1:未删除#0:已删除',
PRIMARY KEY ( `id` )
) ENGINE = INNODB AUTO_INCREMENT = 3 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;
编写实体类
@Data
@TableName("sys_business")
public class Sso {private Long id;private String name;
}
业务代码
mapper
public interface SsoMapper extends BaseMapper<Sso> {
}
service
public interface ISsoService extends IService<Sso> {
}
service实现类
@Service
public class ISsoServiceImpl extends ServiceImpl<SsoMapper, Sso> implements ISsoService {
}
测试
1、先在sso_test(从)读,后向sso(主)插(测试配置文件是否生效)
@Resourceprivate ISsoService iSsoService;@RequestMapping("/slace_master")public boolean masterTest(){Sso sso = iSsoService.getById(1L);System.out.println(sso.toString());return iSsoService.save(sso);}
当前从库中的数据:
主库此时还没有数据:
运行后:
先在从库中查出,然后向主库中写入,实现了数据的同步,说明集成生效了。
2、先插主库,后读从库(没有加事务)
因为sso_test没有对sso这个库的binlog日志进行监听,现在这两个库是没有同步关系的,写入sso后,不会同步到sso_test。
@RequestMapping("insert_and_read")public boolean inAndRed(){Sso sso =new Sso();sso.setId(2L);sso.setName("TestName1");boolean save = iSsoService.save(sso);Sso byId = iSsoService.getById(2L);System.out.println(byId);return save;}
执行后主库中的数据:
执行后从库中的数据:
打印结果:
在2中的方法上加事务@Transactional注解(会强制读取刚执行完写入的库也就是主库)
@RequestMapping("insert_and_read")@Transactionalpublic boolean inAndRed(){Sso sso =new Sso();sso.setId(2L);sso.setName("TestName1");boolean save = iSsoService.save(sso);Sso byId = iSsoService.getById(2L);System.out.println(byId);return save;}
相关文章:
![](https://img-blog.csdnimg.cn/1b702dbaa4f4479ab92b4aac1404e375.png)
【数据库】使用ShardingSphere+Mybatis-Plus实现读写分离
书接上回:数据库调优方案中数据库主从复制,如何实现读写分离 ShardingSphere 实现读写分离的方式是通过配置数据源的方式,使得应用程序可以在执行读操作和写操作时分别访问不同的数据库实例。这样可以将读取操作分发到多个从库(从…...
![](https://www.ngui.cc/images/no-images.jpg)
【第三方接口】阿里云内容审核SDK的使用
1. 内容审核服务 内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。 目前很多平台都支持内容检测,如阿里云、腾讯云、百度AI、网易云等国内大型互联网公司都对外提供了API。 目前用得较多…...
![](https://img-blog.csdnimg.cn/img_convert/d690a72d697431ca9a81495d77ef2e5d.jpeg)
IDEA软件安装包分享(附安装教程)
目录 一、软件简介 二、软件下载 一、软件简介 IntelliJ IDEA是一款流行的Java集成开发环境(IDE),由捷克软件开发公司JetBrains开发。它专为Java开发人员设计,提供了许多高级功能和工具,使得开发人员能够更高效地编写…...
![](https://img-blog.csdnimg.cn/1989b9e7099b4df08844888c89970867.png)
尚硅谷宋红康MySQL笔记 10-13
是记录,我不会记录的特别详细 第10章 创建和管理表 标识符命名规则 数据库名、表名不得超过30个字符,变量名限制为29个只能包含 A–Z, a–z, 0–9, _共63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个MySQL软件中,数据库不能…...
![](https://img-blog.csdnimg.cn/36fa4235bbb04080ab7e7599a6746d46.png)
【ag-grid-vue】基本使用
ag-grid是一款功能和性能强大外观漂亮的表格插件,ag-grid几乎能满足你对数据表格所有需求。固定列、拖动列大小和位置、多表头、自定义排序等等各种常用又必不可少功能。关于收费的问题,绝大部分应用用免费的社区版就够了,ag-grid-community社…...
![](https://img-blog.csdnimg.cn/81c43455749a4c60aa637a7bfbaa7115.jpg)
学习JAVA打卡第四十四天
Scanner类 ⑴Scanner对象 scanner对象可以解析字符序列中的单词。 例如:对于string对象NBA 为了解析出NBA的字符序列中的单词,可以如下构造一个scanner对象。 将正则表达式作为分隔标记,即让scanner对象在解析操作时把与正则表达式匹配的字…...
![](https://www.ngui.cc/images/no-images.jpg)
Excel通用表头及单元格合并
要在Java中实现XLS文件中的通用表头合并和单元格合并,您可以使用Apache POI库。下面是一个示例代码,展示了如何实现这两个功能: import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*;import java.io.FileOutputS…...
![](https://www.ngui.cc/images/no-images.jpg)
微信小程序 自定义全局事件监听实现
一般app页面都需要关联刷新,比如登录后刷新登录前页面,故此,需要一个全局事件监听类,怎么实现呢? 根目录创建文件夹utils,新建文件eventBus.js(致敬java平台的EventBus),…...
![](https://img-blog.csdnimg.cn/5a7eac0e7d67420581f86b3e2231e46b.png)
NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法
NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法。 /*** 返回 UIbtnLocQuery 特性值。* * return nc.ui.pub.beans.UIButton*/ /* 警告:此方法将重新生成。 */ private nc.ui.pub.beans.UIButton getUIbtnLocQuery() {// 搜索全部 按钮return getButtonPan…...
![](https://www.ngui.cc/images/no-images.jpg)
在SpringBoot使用MongoDB时出现的bug和解决
在springboot使用MongoDB时出现的bug和解决 在springboot整合MongoDB时,报错 在springboot整合MongoDB时,报错 INFO 67135 — [ main] org.mongodb.driver.connection : Closed connection [connectionId{localValue:2}] to 127.0.0.1:27017 because there was a socket excep…...
![](https://www.ngui.cc/images/no-images.jpg)
前端面试相关
HTML5 新特征 ✅ HTML5 与es6 新特性cookie 与 sessionStorage 和 localStorage 的区别 ✅Cookie 和localStorage、SessionStorage 区别事件冒泡和事件捕获 ✅ 事件捕获和事件冒泡垂直居中 DIV ✅ 元素垂直水平居中的多种办法(块级 行内元素)两栏布局左边…...
![](https://img-blog.csdnimg.cn/097f7aea6100488cb4224f42c8cb4b04.png)
在ubuntu上部署label-studio
1. 安装label-studio 由于服务器的默认python3版本太低,尝试了很多方法,没有升级。因此采用annaconda方式安装label-studio. a.安装anaconda: 参照如下链接,安装anaconda。 Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1ÿ…...
![](https://img-blog.csdnimg.cn/086e6c599ad84ec78d20f8de1438f67d.png)
HashSet
HashSet集合底层采取哈希表存储数据 哈希表是一种对于增删改查数据性能都较好的结构 hashCode方法和equals方法的配合流程 当添加对象的时候,会先调用对象的hashCode方法计算出一个应该存入的索引位置,查看该位置上是否存在元素 不存在:直接存…...
![](https://img-blog.csdnimg.cn/d7360b3acfa3425195423452b6917937.png)
Java-继承和多态(下)
补全构造方法 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextInt()) {int x scanner.nextInt();int y scanner.nextInt();int z scanner.nextInt();Sub sub new…...
![](https://img-blog.csdnimg.cn/27f91651790e4ba09e6f814c5c462331.png)
Docker搭建并配置Prometheus
首先确保Linux已安装Docker,如未安装请先参考:Linux安装Docker 1.安装准备 创建挂载目录 /opt/prometheus/data目录,准备用来挂载放置prometheus的数据 /opt/prometheus/config目录,准备用来放置prometheus的配置文件 /opt/pro…...
![](https://img-blog.csdnimg.cn/img_convert/82b9e63abe03db6de507a97744fb3dff.png)
“解放 Arweave“优惠:4EVERLAND的无缝上传教程
为了进一步展示 Arweave 的能力,4EVERLAND 骄傲地推出了“解放 Arweave”活动。我们认识到 Arweave 在数据完整性、抗审查性以及长期保存方面的无与伦比的优势,因此我们与这个去中心化的存储巨头建立了强大的集成。 克服了过去与加密货币支付逻辑相关的…...
![](https://img-blog.csdnimg.cn/44060e5956764d66aed2b8a12d2fe0bb.png)
系统学习Linux-LVS集群
集群概述 负载均衡技术类型 四层负载均衡器 也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等; 七层负载均衡器 也称为 7 层交换机,位于 OSI 的最高层,即…...
![](https://www.ngui.cc/images/no-images.jpg)
使用matplotlib绘制动图
主程序如下: 项目:701项目三分报告 作者:WN 内容:速度障碍法实现 时间:2023年8月26号import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import animation from utils import *uav1 Agen…...
![](https://img-blog.csdnimg.cn/ce1014289ac24a8bb69a3c1b8f692a1a.png)
加油站ai视觉分析检测预警
加油站ai视觉分析预警系统通过yolov8图像识别和行为分析,加油站ai视觉分析预警算法识别出打电话抽烟、烟火行为、静电释放时间是否合规、灭火器摆放以及人员工服等不符合规定的行为,并发出预警信号以提醒相关人员。YOLOv8 的推理过程和 YOLOv5 几乎一样&…...
![](https://img-blog.csdnimg.cn/36a375c5f5594525b2e809fd1dfae47c.png)
Docker构建镜像
Docker根据Dockerfile文件构建镜像 在实际生产中,常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中,本文将从从零开始介绍Dockerfile如何使用,构建镜像。 Dockerhub官网地址:https://registry.hub.docke…...
![](https://img-blog.csdnimg.cn/d6793ff0f8514bd680728813da002c15.jpeg#pic_center)
【太多网工对NAT还存在这4种误解!你是其中一个吗?】
NAT是解决公网地址不够用大家最熟悉的网络技术之一,而NAT最依赖的是NAT translation表项,至于NAT的概念和背景这里不再解释,网络上有很多关于此的类似介绍,自己搜索即可。下面主要是针对大家对NAT的一些误解进行分析。 1 误解一…...
![](https://www.ngui.cc/images/no-images.jpg)
React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别
React钩子函数在React开发中扮演着非常重要的角色。其中,useEffect、useLayoutEffect和useInsertionEffect是三个常用的钩子函数,它们的作用虽然有些相似,但是也存在一些区别。在本文中,我们将详细介绍这三个钩子函数的区别&#…...
![](https://img-blog.csdnimg.cn/5cb9d2881f194203b13c763d318fc307.png)
Unity——后期处理举例
Post Processing(后期处理)并不属于特效,但现代的特效表现离不开后期处理的支持。本文以眩光(Bloom)为例,展示一种明亮的激光的制作方法 1、安装后期处理扩展包 较新的Unity版本已经内置了新版的后期处理扩…...
![](https://img-blog.csdnimg.cn/89f7617bf5b34889b0334208c15b6ec7.png)
PMP P-05 Quality Management
质量管理...
![](https://img-blog.csdnimg.cn/778384453ee146ef95c33ed3c4b4c2fb.png)
vue中css修改滚动条样式
vue中css修改滚动条样式 效果图: 代码(在app.vue中全局增加下面样式即可): &::-webkit-scrollbar {width: 8px;height: 8px;border-radius: 3px;}/*定义滚动条轨道 内阴影圆角*/&::-webkit-scrollbar-track {//-webkit-box-shadow: inset 0 0 …...
![](https://www.ngui.cc/images/no-images.jpg)
uniapp的H5实现图片长按保存
实现图片预览 使用uniapp的api实现图片预览,可以缩放,关闭等操作 uni.previewImage({urls:[imageUrl],success:()>{this.controllTouch();} }) imageUrl是图片地址,如https://www.111.com/abc/image.png urls是字符串数组,…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 8:Stream API 流式操作(学习)
Java 8:Stream API Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据; 这种风格…...
![](https://www.ngui.cc/images/no-images.jpg)
04_20 直接使用代码 创建内核模块获取物理内存信息
好像和 free得出来有关 和/proc/meminfo 有关 但是下面是全部的物理页 #include <linux/version.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h>//下面宏表示物理内存空间起始地址 对应页帧号 #define ARCH_PFN_OFFSET…...
![](https://img-blog.csdnimg.cn/58183bb6b4c24a70abf800f40783c43c.png)
<C++> STL_list
1.list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。list与…...
![](https://img-blog.csdnimg.cn/807aed2d429d44338e9aa45772405a69.png)
聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化
聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化 目录 聚类分析 | MATLAB实现基于FCM模糊C均值聚类结果可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 FCM模糊C均值聚类,聚类结果可视化,MATLAB程序。 FCM(Fuzzy C-Means&a…...
![](/images/no-images.jpg)
企业首页网站属于什么类型网站/关键词权重查询
今天正式开博,作为对一个10年技术工作者的小结。转载于:https://blog.51cto.com/sofia/105648...
![](/images/no-images.jpg)
购物网站建设与开发/近期国内外重大新闻10条
好吧,我标题党了。作为 Python 教师,我发现理解装饰器是学生们从接触后就一直纠结的问题。那是因为装饰器确实难以理解!想弄明白装饰器,需要理解一些函数式编程概念,并且要对Python中函数定义和函数调用语法中的特性有…...
![](/images/no-images.jpg)
哈尔滨网站建设美丽/c++培训班学费一般多少
树莓派官方系统默认不启用SSH,本教程将介绍几种开启SSH的方法:[TOC]## **方法一**:使用树莓派系统配置命令开启在树莓派上打开终端(快捷键打开:CTRLALTT)输入命令:raspi-config(回车)![](http://qiniucn.16302.com/85d…...
![](/images/no-images.jpg)
济南城市建设集团/深圳整站seo
我有一个本地安装的库的问题 . 在我的项目中有xmlrpc 0.7库:myproject/-- xmlrpc0.7/-- src/如果没有找到,我希望CMake使用本地xmlrpc 0.7目录进行回退 . 两个问题,第一个,find_path()或find_library()不适用于本地目录 . 我使用了…...
![](https://img-blog.csdnimg.cn/img_convert/812498e55df4f6e5fd8c7ebd7fa9cc63.png)
wordpress 缺少父主题/整站seo排名外包
NEW关注Tech逆向思维视频号最新视频→【最骇人的5起自动驾驶“杀人”事故】来源|大数据文摘文|王烨2020年6月,由于国外疫情严重,国内的女友怀孕,17岁的小陈孤身在国外格外焦虑。雪上加霜的是,尽管小陈非常想…...
![](https://img-blog.csdnimg.cn/img_convert/3ca0c1126e72956cdb78ed8cd7886eb0.png)
商务网站建设内容/全网营销代理加盟
作者戴金艳,公众号:计算机视觉life, 编辑部成员. 更好的阅读体验请看首发原文链接计算机视觉方向简介 | 图像拼接简介 图像拼接是将同一场景的多个重叠图像拼接成较大的图像的一种方法,在医学成像、计算机视觉、卫星数据、军事目标…...