shardingjdbc-读写分离配置

文章目录

  • 1、application.yml
  • 2、shardingsphere.yaml
  • 3、创建实体类 User
  • 4、创建 UserMapper
  • 5、添加依赖
  • 6、读写分离测试
  • 7、事务测试

我们的主从复制已经提前搭建好: mysql-搭建主从复制:https://blog.csdn.net/m0_65152767/article/details/142214434

1、application.yml

spring:datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver# 驱动类:使用shardingjdbc提供的驱动类driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
#    username: root
#    password: 123456
#    url: jdbc:mysql://192.168.74.148:3306/mydb2?serverTimezone=GMT%2B8url: jdbc:shardingsphere:classpath:shardingsphere.yaml

2、shardingsphere.yaml

# 模式配置
mode:# shardingjdbc:使用的是单机模式type: Standalonerepository:type: JDBC
# 数据源配置
dataSources:write_ds:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3306/mydb2username: rootpassword: 123456read_ds_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3316/mydb2username: rootpassword: 123456# 读写分离配置:指定读交给哪个数据源 写交给哪个
rules:- !READWRITE_SPLITTINGdataSources:readwrite_ds:writeDataSourceName: write_dsreadDataSourceNames:- read_ds_0transactionalReadQueryStrategy: PRIMARY # 事务内读请求的路由策略,可选值:PRIMARY(路由至主库)、FIXED(同一事务内路由至固定数据源)、DYNAMIC(同一事务内路由至非固定数据源)。默认值:DYNAMIC# 配置读操作的负载均衡策略loadBalancerName: randomloadBalancers:random:type: RANDOMround_robin:type: ROUND_ROBINweight:type: WEIGHTprops:read_ds_0: 1
# 输出sql:
props:# 打印 sharding 的sql日志sql-show: true

3、创建实体类 User

package com.atguigu.sharding.jdbc.demo.bean;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "t_user")
public class User {private Long id;private String name;}

4、创建 UserMapper

package com.atguigu.sharding.jdbc.demo.mapper;
import com.atguigu.sharding.jdbc.demo.bean.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

5、添加依赖

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--操作数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!--mybatisPlus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>5.4.0</version></dependency><!--兼容jdk17和spring boot3--><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.33</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.8</version></dependency></dependencies>

6、读写分离测试

package com.atguigu.sharding.jdbc.demo;import com.atguigu.sharding.jdbc.demo.bean.User;
import com.atguigu.sharding.jdbc.demo.mapper.UserMapper;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ShardingJdbcDemoApplicationTests {@ResourceUserMapper userMapper;@Testvoid contextLoads() {for (int i = 0; i < 3; i++) {//User user1 = userMapper.selectById(1);userMapper.selectList(null).forEach(System.out::println);}}}
2024-09-24T10:10:43.199+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Logic SQL: SELECT  id,name  FROM t_user
2024-09-24T10:10:43.199+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Actual SQL: read_ds_0 ::: SELECT  id,name  FROM t_user
User(id=1, name=张三)
User(id=2, name=李四)
User(id=3, name=3316)
2024-09-24T10:10:43.277+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Logic SQL: SELECT  id,name  FROM t_user
2024-09-24T10:10:43.277+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Actual SQL: read_ds_0 ::: SELECT  id,name  FROM t_user
User(id=1, name=张三)
User(id=2, name=李四)
User(id=3, name=3316)
2024-09-24T10:10:43.282+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Logic SQL: SELECT  id,name  FROM t_user
2024-09-24T10:10:43.282+08:00  INFO 1436 --- [           main] ShardingSphere-SQL                       : Actual SQL: read_ds_0 ::: SELECT  id,name  FROM t_user
User(id=1, name=张三)
User(id=2, name=李四)
User(id=3, name=3316)

7、事务测试

transactionalReadQueryStrategy: PRIMARY

事务内读请求的路由策略,可选值:

PRIMARY(路由至主库)

FIXED(同一事务内路由至固定数据源)

DYNAMIC(同一事务内路由至非固定数据源)。默认值:DYNAMIC

测试1:

不添加@Transactional:insert对主库操作,select对从库操作

测试2:

添加@Transactional:则insert和select按照transactionalReadQueryStrategy的配置执行

/*** 事务测试*/
@Transactional//开启事务
@Test
public void testTrans(){User user = new User();user.setUname("铁锤");userMapper.insert(user);List<User> users = userMapper.selectList(null);
}

注意: 在JUnit环境下的@Transactional注解,默认情况下就会对事务进行回滚(即使在没加注解@Rollback,也会对事务回滚)
常见错误
在这里插入图片描述
ShardingSphere-JDBC远程连接的方式默认的密码加密规则是:mysql_native_password

因此需要在服务器端修改服务器的密码加密规则,如下:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

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

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

相关文章

AI最大的应用是什么,如何成为初代AGI产品经理?

❝ 在当今这个由数据驱动的时代&#xff0c;AI技术正以前所未有的速度发展&#xff0c;它不仅改变了我们与数字世界的互动方式&#xff0c;更在物理世界中掀起了一场革命。阿里巴巴集团CEO吴泳铭在2024云栖大会上的演讲&#xff0c;为我们描绘了AI技术未来的巨大潜力。他指出&a…

华为云长江鲲鹏深度赋能,大势智慧稳居“实景三维+AI”领域排头兵

本文转自长江日报大武汉客户端 走出象牙塔第10年&#xff0c;武汉大势智慧科技有限公司&#xff08;以下简称“大势智慧”&#xff09;已成长为国内三维技术创新及应用领域龙头企业&#xff0c;其自主研发的“重建大师”等三维测绘软件系统在各级测绘系统占有率达到87.5%。 这…

奇迹再现!帕金森患者6年后停药,竟能自如行走:背后的故事与启示

在医学的浩瀚星空中&#xff0c;总有一些故事如同璀璨星辰&#xff0c;照亮着患者与家属的希望之路。今天&#xff0c;我们要讲述的&#xff0c;就是一位与帕金森病抗争了6年之久的患者&#xff0c;如何在看似不可能的境遇下&#xff0c;实现了停药后自如行走的奇迹。这不仅是对…

前端——元素类型+文字样式

一、元素类型 1. 块级元素 >块级标签: div p h1~h6 ul ol li dl dt dd hr br等 还有表格标签 table 特征: 1.独占一行 不会共享一行的位置 2.不设置宽度 默认是继承父级宽度 100% 结构上没有父级那就是浏览器 3.高度不设置 默认由内容撑开 4.可…

mock虚拟接口技术

一、什么是mock mock指的就是使用mock创建出来的一个虚拟的接口 二、对于测试人员而言&#xff0c;我们为什么要使用mock 当我们进行接口测试时&#xff0c;如果对应的接口还没有开发好&#xff0c;但是我们又需要用到这个接口响应的信息&#xff0c;这个时候我们就可以使用…

学习threejs,绘制二维线

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制二维线1. ☘️…

筛子排序(SieveSort)

当你手头有了支持AVX-512&#xff08;SIMD&#xff09;的i9-11900K&#xff0c;你最想做什么&#xff1f; i9-11900K&#xff1f;现在都14代了&#xff0c;谁还用11代的&#xff1f; 但12代以上就没有AVX-512了&#xff01; AVX-512有什么特别之处&#xff1f;有了这个硬件支…

Redis 的 Java 客户端有哪些?官方推荐哪个?

Redis 官网展示的 Java 客户端如下图所示&#xff0c;其中官方推荐的是标星的3个&#xff1a;Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中&#xff0c;Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较&#xff1a; Jedis&#xff1a; 线程安全&…

安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…

【Linux】Linux基本命令

目录 文件和目录操作&#xff1a; ls cd pwd cp mv rm mkdir rmdir touch clear history which/whereis 文件查看和编辑&#xff1a; cat less head tail vi 或 vim sz/rz echo 系统信息和管理&#xff1a; su uname hostname df free top ps ki…

高可用集群keepalived---实战案例1

目录 一、环境: 二、文件的配置 1、server1 下载keepalived 创建etc下的keepalived目录,编辑配置文件 开机启动keepalived 安装Nginx 启动keepalived 2、server2 下载keepalived 创建etc下的keepalived目录,编辑配置文件 开机启动keepalived 安装Nginx 启动keepali…

软件企业毛利率正在变得越来越低

软件开发毛利率逐渐降低的现象可能受到多种因素的影响&#xff1a; 市场竞争加剧&#xff1a;随着软件行业的快速发展&#xff0c;市场上的软件产品和服务越来越多&#xff0c;竞争也越来越激烈。为了在市场上保持竞争力&#xff0c;软件企业可能不得不降低价格&#xff0c;这直…

【word密码】word怎么限制格式,但可以修改文字?

想要限制word文件中文字的格式&#xff0c;但是又希望别人能够删除、输入文字&#xff0c;想要实现这种设置我们可以对word文件设置限制编辑。 点击word文件工具栏中的审阅 – 限制编辑&#xff0c;勾选上【限制对选定的样式设置格式】 然后在弹出的提示框中&#xff0c;输入我…

LDRA Testbed(TBrun)软件单元测试_常见问题及处理

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成&#xff08;自动静态分析并用邮件自动发送分析结果&#xff09; LDRA Testbed软件静态分析_软件质量度量 LDRA Testbed软件…

太爱这5本书了,建议所有大模型人去翻烂它❗

要说现在最热门的技术&#xff0c;可谓非大模型莫属&#xff01; 不少小伙伴都想要学习大模型技术&#xff0c;转战AI领域&#xff0c;以适应未来的大趋势&#xff0c;寻求更有前景的发展~~ 然而&#xff0c;在学习大模型技术这条道路上&#xff0c;却不知道如何进行系统的学…

DQL学习

一、基础查询 1.查询多个字段 select 字段列表 from 表名; select * from 表名;-- 查询所有数据 但不建议使用&#xff01;&#xff01;&#xff01;&#xff01; 2.去除重复记录 select DISTINCT 字段列表 from 表名; 3.起别名 as&#xff1b;as也可以省略但中间要加空…

关于宝塔PHP getenv无法获取环境变量问题解决办法

今天有用ThinkPHP8接入阿里云OSS时&#xff0c;需要用的用到getenv()来读取环境变量&#xff0c;因为新版OSS SDK是用环境变更来设置AK的。 现象 正常执行PHP文件&#xff0c;可以取到环境变量&#xff1b;但是通过nginxphp-fpm调用脚本取到不到环境变量 原因 php-fpm为了防止…

车辆检测系统源码分享

车辆检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

算法4-----综合训练(4)

一&#xff1a;单词搜索 题目&#xff1a; 给定一个m*n的二位字符网格和一个字符串单词。如果单词存在于网格中&#xff0c;返回true&#xff0c;不然&#xff0c;返回false。 注意&#xff1a;单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;同…

停车场管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统停车场管理系统信息管理难度大&#xff0c;容错率低&…