请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

分库分表(3) ---SpringBoot + ShardingSphere 实现读写分离

[复制链接]
查看2682 | 回复1 | 2019-10-12 10:22:35 | 显示全部楼层 |阅读模式

分库分表(3)---ShardingSphere实现读写分离

有关ShardingSphere概念前面写了两篇博客:

1、分库分表(1) --- 理论

2、 分库分表(2) --- ShardingSphere(理论)

下面就这个项目做个团体简单介绍,并在文章最下方附上项目Github地址

一、项目概述

1、技能架构

项目总体技能选型

  1. <code>SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)</code>
复制代码

2、项目阐明

场景 如果实际项目中Mysql是 Master-Slave (主从)摆设的,那么数据生存到Master库,Master库数据同步数据到Slave库,数据读取到Slave库,

如许可以减缓数据库的压力。

3、数据库设计

我们这个项目中Mysql服务器并没有实现主从摆设,而是同一个服务器创建两个库,一个当做Master库,一个当做Slave库。所以这里是不能实现的功能就是Master库

新增数据自动同步到Slave库。如许也更有利于我们测试看结果。

Master库

102235tfmfx1mztexfp7x1.jpg

Slave库

102235zzcf80r9sizx2u6z.jpg

从两幅图中可以看出,我这里在同一个服务器建两个数据库来模仿主从数据库。为了方便看测试结果,这里主从数据库中的数据是不一样的


二、焦点代码

阐明 完整的代码会放到GitHub上,这里只放一些焦点代码。

1、pom.xml

  1. <code> <properties>
  2. <java.version>1.8</java.version>
  3. <mybatis-spring-boot>2.0.1</mybatis-spring-boot>
  4. <druid>1.1.16</druid>
  5. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  6. </properties>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.mybatis.spring.boot</groupId>
  14. <artifactId>mybatis-spring-boot-starter</artifactId>
  15. <version>${mybatis-spring-boot}</version>
  16. </dependency>
  17. <!--mybatis驱动-->
  18. <dependency>
  19. <groupId>mysql</groupId>
  20. <artifactId>mysql-connector-java</artifactId>
  21. </dependency>
  22. <!--druid数据源-->
  23. <dependency>
  24. <groupId>com.alibaba</groupId>
  25. <artifactId>druid-spring-boot-starter</artifactId>
  26. <version>${druid}</version>
  27. </dependency>
  28. <!--shardingsphere最新版本-->
  29. <dependency>
  30. <groupId>org.apache.shardingsphere</groupId>
  31. <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
  32. <version>4.0.0-RC1</version>
  33. </dependency>
  34. <!--lombok实体工具-->
  35. <dependency>
  36. <groupId>org.projectlombok</groupId>
  37. <artifactId>lombok</artifactId>
  38. </dependency>
  39. </dependencies></code>
复制代码

2、application.properties

  1. <code>server.port=8088
  2. #指定mybatis信息
  3. mybatis.config-location=classpath:mybatis-config.xml
  4. spring.shardingsphere.datasource.names=master,slave0
  5. # 数据源 主库
  6. spring.shardingsphere.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
  7. spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
  8. spring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/master?characterEncoding=utf-8
  9. spring.shardingsphere.datasource.master.username=root
  10. spring.shardingsphere.datasource.master.password=123456
  11. # 数据源 从库
  12. spring.shardingsphere.datasource.slave0.type=com.alibaba.druid.pool.DruidDataSource
  13. spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
  14. spring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3306/slave?characterEncoding=utf-8
  15. spring.shardingsphere.datasource.slave0.username=root
  16. spring.shardingsphere.datasource.slave0.password=123456
  17. # 读写分离
  18. spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin
  19. spring.shardingsphere.masterslave.name=ms
  20. spring.shardingsphere.masterslave.master-data-source-name=master
  21. spring.shardingsphere.masterslave.slave-data-source-names=slave0
  22. #打印sql
  23. spring.shardingsphere.props.sql.show=true
  24. </code>
复制代码

Sharding-JDBC可以通过JavaYAMLSpring定名空间Spring Boot Starter四种方式设置,开发者可根据场景选择适合的设置方式。详细可以看官网。

3、UserController

  1. <code>@RestController
  2. public class UserController {
  3. @Autowired
  4. private UserService userService;
  5. /**
  6. * @Description: 生存用户
  7. */
  8. @PostMapping("save-user")
  9. public Object saveUser() {
  10. return userService.saveOne(new User("小小", "女", 3));
  11. }
  12. /**
  13. * @Description: 获取用户列表
  14. */
  15. @GetMapping("list-user")
  16. public Object listUser() {
  17. return userService.list();
  18. }
  19. }</code>
复制代码


三、测试验证

1、读数据

102236cbzqa3dq208ck9s2.png

我们可以发现读取的数据是Slave库的数据。我们再来看控制台打印的SQL。可以看到读操作是Slave库。

102236ms3tl01seq11z9t7.png

2、写数据

哀求

  1. <code>localhost:8088/save-user?name=小小&sex=女&age=3</code>
复制代码

查看Mater数据库

102236mlp04so0klpk61zj.png

发现Master数据库已经多了一条数据了,再看控制台打印的SQL。

102237hyv84ccmvqaqz8yy.png

这个时间如果去看Slave库的话这条新增的数据是没有的,由于没有同步已往。

Github地址:https://github.com/yudiandemingzi/spring-boot-sharding-sphere

参考

1、ShardingSphere中文文档

2、ShardingSphere官网

3、Shardingsphere Github库



  1. <code> 我信赖,无论今后的门路多么崎岖,只要捉住本日,迟早会在奋斗中尝到人生的甘甜。捉住人生中的一分一秒,胜过虚度中的一月一年!(18)</code>
复制代码








来源:https://www.cnblogs.com/qdhxhz/p/11656205.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则