`

shardingsphere读写分离

 
阅读更多

https://github.com/Grrui/springboot-demo/tree/main/springboot-shardingsphere

https://shardingsphere.apache.org/document/current/cn/reference/encrypt

 

SpringBoot2.4.3 + JPA + Hikari + ShardingSphere实现读写分离

1.数据库表结构

CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

2. 主要代码

2.1.配置文件设置

sharding.jdbc.datasource.names=master,slave
# master主库设置
sharding.jdbc.datasource.master.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.master.jdbc-url=jdbc:mysql://ip:port/database
sharding.jdbc.datasource.master.username=
sharding.jdbc.datasource.master.password=
# Slave从库设置
sharding.jdbc.datasource.slave.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.slave.jdbc-url=jdbc:mysql://ip:port/database
sharding.jdbc.datasource.slave.username=
sharding.jdbc.datasource.slave.password=
# 配置读写分离
sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=master
sharding.jdbc.config.masterslave.slave-data-source-names=slave
# 打印SQL,测试时可以看到SQL查询使用的DataSource
sharding.jdbc.config.props.sql.show=true

2.2.实体类

@Entity
@Data
@Table(name = "t_user")
public class UserDO {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Integer id;

    String name;

    Integer age;
    
    public UserDO() {
    }

    public UserDO(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

2.3.Repo配置

@Repository
public interface UserRepo extends JpaRepository<UserDO, Integer> {

    @Transactional
    @Modifying
    @Query(value = "update UserDO set age = :age where name = :name")
    void updateAge(@Param("name") String name, @Param("age") Integer age);

    UserDO findByName(String name);

}

到此就配置完了,可以使用起来了。我写了一个service+controller方便测试,代码如下:

2.4.Service

@Service
public class UserService {

    @Autowired
    UserRepo userRepo;

    public void testUpdate(String name, Integer age) {
        userRepo.updateAge(name, age);
    }

    public Integer testSelect(String name) {
        return userRepo.findByName(name).getAge();
    }

}

2.5.Controller

@RestController
@Slf4j
public class TestController {

    @Autowired
    UserService userService;

    @GetMapping("/test")
    public Integer testInsert() {
        log.info("start update");
        userService.testUpdate("zhangsan", (int) (Math.random() * 100));
        log.info("start select");
        return userService.testSelect("zhangsan");
    }

}

3.测试

controller中会先进行写操作(修改年龄),然后进行读操作(读取修改后的年龄)

访问http://127.0.0.1:8080/test 后查看日志如下:

img.png

可以看到update操作落在了master数据源上,select操作落在slave数据源上。

分享到:
评论

相关推荐

    springboot+mybatis-plus+shardingsphere 实现读写分离

    本项目以"springboot+mybatis-plus+shardingsphere 实现读写分离"为主题,结合了Spring Boot的快速开发能力、MyBatis-Plus的简化数据操作以及ShardingSphere的分布式数据库解决方案,旨在提高系统的读取性能和可扩展...

    Docker搭建MySQLl基于ShardingSphere-Proxy读写分离(docker-compose)

    docker_compose搭建shardingSphereProxyMysql主从读写分离

    shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo

    ShardingSphere是一款开源的分布式数据库中间件,它提供了包括数据分片、读写分离、数据库事务和数据安全等核心功能。在这个"shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo"中,我们将探讨如何在实际...

    springboot+mybatis+druid+redis实现数据库读写分离和缓存

    在现代Web应用开发中,数据库读写分离和缓存技术是提高系统性能和可扩展性的关键策略。本项目采用SpringBoot、MyBatis、Druid和Redis这四个核心技术来实现这一目标。以下将详细讲解这些组件如何协同工作,以及它们...

    使用sharding-jdbc快速实现自动读写分离-demo源码

    在IT行业中,数据库读写分离是一种常见的优化策略,它能够有效地提高系统的并发处理能力和响应速度。Sharding-JDBC是阿里巴巴开源的一款轻量级Java框架,它可以在不改变业务代码的前提下,帮助我们快速实现数据库的...

    39套Java SpringBoot系统源码集合超值划算.zip

    整合ELK、ShardingSphere读写分离、Redisson读写分离、消息队列等eladmin-main.zip 基于SpringCloud的企业级微服务多租户系统、多语言的脚手架, 代码组件化、高内聚低耦合,代码简介,注释丰富容易上手,该项目包括...

    在应用层通过spring特性解决数据库读写分离代码

    在现代企业级应用中,数据库读写分离是一种常见的优化策略,它可以提高系统的读取性能,减轻主数据库的压力,保证数据的稳定性和可用性。Spring框架提供了丰富的特性来支持这一实践,使得开发者能够在应用层轻松实现...

    ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表

    ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 课程目标 快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是...

    ShardingSphere:SpringBoot2+MybatisPlus读写分离+分表

    快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC...

    ShardingJDBC5.1.1按月分库分表、读写分离、自动创表完整demo

    《使用ShardingJDBC5.1.1实现按月分库分表、读写分离与自动创表的全面实战》 在现代企业级应用中,数据量的快速增长使得数据库的性能优化成为至关重要的环节。ShardingJDBC作为一款轻量级的Java框架,能够有效地...

    springboot3.2.3集成shardingsphere5.4.1及动态数据源demo项目

    而ShardingSphere作为一个开源的数据分片、分布式数据库中间件,提供了数据分片、读写分离、数据库治理等功能,极大地提升了大数据处理的能力。在本项目中,我们采用的是ShardingSphere 5.4.1版本,该版本对性能进行...

    spring-boot-sharding-sphere:SpringBoot + ShardingSphere 实现读写分离 分库分表

    ShardingSphere实现分库 + 读写分离 有关ShardingSphere实现分库分表前面写了7篇博客作为该项目做详细说明。 1、 2、 3、 4、 5、 6、 7、 该项目拉下后配置数据库地址,和创建相应的库和表后就可以运行成功。 一、...

    ShardingSphere 5.1.2版 开发者手册 中文版

    ShardingSphere 提供了灵活的读写分离机制,支持基于主从复制、读写分离和负载均衡等多种读写分离策略。ShardingSphere 的读写分离机制可以满足各种业务场景的需求,帮助开发者解决数据库性能和高可用性问题。

    Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离.docx

    ### Sharding-JDBC 教程:Spring Boot 整合 Sharding-JDBC 实现读写分离 #### 一、Sharding-JDBC 和 Spring Boot 的简介 **Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、...

    详解Spring Boot中整合Sharding-JDBC读写分离示例

    Spring Boot 中整合 Sharding-JDBC 读写分离示例解析 本文主要介绍了在 Spring Boot 框架中如何整合 Sharding-JDBC 实现读写分离的示例。Sharding-JDBC 是一个开源的数据库中间件,提供了数据分片、读写分离、...

    sharding-jdbc多数据源,实现读写分离

    Sharding-JDBC是Apache ShardingSphere项目的一部分,它作为一个Java库,无需额外中间件,可以直接嵌入到现有应用中,提供透明化的数据分片和读写分离功能。它支持多种数据库类型,包括MySQL、Oracle、SQL Server等...

    基于mybatis,springboot开箱即用的读写分离插件.zip

    【标题】"基于mybatis,springboot开箱即用的读写分离插件.zip" 提供了一个集成mybatis和springboot的解决方案,旨在简化数据库读写分离的实现过程。这个插件使得开发者能够快速地在自己的应用中部署读写分离功能,...

    ShardingSphere课件

    这部分可能详细阐述了ShardingSphere的读写分离实现方式,包括读写路由规则、主从延迟问题的处理、以及在复杂业务场景下的读写分离策略。 **六、源码解析** ShardingSphere的源码提供了深入理解其工作原理的机会。...

    shardingsphere学习笔记.xmind

    ShardingSphere是开源分布式数据库中间件,核心功能是数据分片和读写分离。Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又...

Global site tag (gtag.js) - Google Analytics