一、简介

Sharding-JDBC通过sql语句语义分析,当sql语句有insert、update、delete时,Sharding-JDBC就把这次操作在主数据库上执行;当sql语句有select时,就会把这次操作在从数据库上执行,从而实现读写分离过程。但Sharding-JDBC并不会做数据同步,数据同步是配置MySQL后由MySQL自己完成的。

二、主从mysql环境准备

主服务器Master01(192.168.56.20)、从服务器Slave01(192.168.56.21):

我们这次同步的策略是同步user_db库。

首先我们在user_db创建一张表:

create table t_user(`user_id` bigint(20) primary key,`username` varchar(100) not null,`ustatus` varchar(50) not null
)


三、使用yml配置读写分离策略

spring:shardingsphere:# 数据源配置datasource:# 数据源名称,多数据源以逗号分隔,名称可以随意起名names: master,slavemaster: #配置第一个数据源driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcepassword: xxxxxxusername: dhappurl: jdbc:mysql://192.168.56.20:3306/user_db?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaislave: #配置第一个数据源driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcepassword: xxxxxxusername: dhappurl: jdbc:mysql://192.168.56.21:3306/user_db?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai# 规则配置rules:readwrite-splitting:data-sources:ds0: #主库从库逻辑数据源定义 ds0 为 user_dbwrite-data-source-name: masterread-data-source-names: slaveload-balancer-name: round-robinload-balancers:round-robin: # 负载均衡算法type: ROUND_ROBIN # 轮询# 属性配置props:# 展示修改以后的sql语句sql-show: true

四、使用java测试代码进行测试

1、UserController

package com.sharding.demo.web;import com.sharding.demo.model.User;
import com.sharding.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RequestMapping("user")
@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "addUser")public void addUser(){for (int i = 0; i < 10; i++) {User user = new User();user.setUserId(Long.valueOf(i));user.setUsername("java"+i);user.setUstatus(i%2==0?String.valueOf(1):String.valueOf(0));userService.addUser(user);}}@RequestMapping(value = "queryUserByParams")public List<User> queryUserByParams(){return userService.queryUserByParams();}
}

2、UserService

package com.sharding.demo.service;import com.sharding.demo.model.User;import java.util.List;public interface UserService {void addUser(User user);List<User> queryUserByParams();}

3、UserServiceImpl

package com.sharding.demo.service.impl;import com.sharding.demo.mapper.UserMapper;
import com.sharding.demo.model.User;
import com.sharding.demo.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;@Service
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic void addUser(User user) {userMapper.insert(user);}@Overridepublic List<User> queryUserByParams() {return userMapper.selectList(null);}
}

4、UserMapper

package com.sharding.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sharding.demo.model.User;public interface UserMapper extends BaseMapper<User> {
}

五、通过浏览器请求开始测试

1、http://localhost:8080/user/addUser新增结果测试

可以看到新增使用的是master数据库:

2、http://localhost:8080/user/queryUserByParams 查询结果测试

 可以通过日志发现查询使用的是slave服务器

Sharding-JDBC之 读写分离相关推荐

  1. mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc

    sharding-sphere是强大的读写分离.分表分库中间件,sharding-jdbc是sharding-sphere的核心模块.官方网站 springboot项目中集成sharding-jdbc ...

  2. Sharding JDBC分片和读写分离详解

    目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...

  3. SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 30 分钟. 来自:blog.csdn.net/qq_40378034/article/details/115264837 S ...

  4. SpringBoot + Sharding JDBC 读写分离、分库分表

    Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 ShardingSphere,20 ...

  5. 【MySQL 读写分离】Sharding JDBC + Spring boot 实现数据库读写分离的登录 Demo

    上篇文章我们搭建了 MySQL 数据库主从复制集群 MySQL 搭建主从复制集群~~~ 本篇文章我们利用搭建好的主从复制集群,使用 SpringBoot 结合 Sharding-JDBC 搭建一个小的 ...

  6. Sharding Sphere 读写分离的配置

    #配置主从数据源,要基于MySQL主从架构. spring.shardingsphere.datasource.names=m0,s0spring.shardingsphere.datasource. ...

  7. Sharding Sphere ~ Sharding-jdbc分库分表、读写分离

    Sharding Sphere 是什么? 1.一套开源的分布式数据库中间件解决方案 2.有三个产品:Sharding-JDBC 和 Sharding-Proxy 3.定位为关系型数据库中间件,合理在分 ...

  8. ShardingSphere JDBC 分库分表 读写分离 数据加密

    简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...

  9. MySQL读写分离(二)—— jdbc驱动实现

    mysql-connector-java驱动本身也提供了读写分离的功能,使用起来也非常简单. 网上很多文章会提到com.mysql.jdbc.ReplicationDriver这个类,其实这个类在稍高 ...

  10. 干货丨金仓JDBC读写分离介绍和最佳实践

    背景和目的 当前业务系统面临的业务压力越来越大,单节点已经难以满足现在和未来的业务需求.因此市面上出现了很多的解决方案,其中就包括读写分离集群.读写分离通过备机读负载均衡,降低主机上读负载,以此提高整 ...

最新文章

  1. Time profile 使用
  2. linux ctime 时间戳,关于LINUX三种时间戳的详细说明(带实验)
  3. Java 虚拟机运行时数据区
  4. 汇编语言(王爽)第四版检测点2.2答案
  5. b站学python_Python爬虫学习教程 bilibili网站视频爬取!【附源码】
  6. [leetcode]Unique Paths
  7. 拓端tecdat|R语言股票收益分布一致性检验KS检验Kolmogorov-Smirnov、置换检验Permutation Test可视化
  8. java反编译工具luyten、JD-GUI下载【非常详细】
  9. 关于SQL注入及防御
  10. 服务器电脑用哪个系统好,电脑系统哪个好用?电脑系统有几种版本
  11. 【零基础系列】了解学习 uni-app
  12. Oracle语法 50道sql语句练习
  13. 【计算机视觉】相机标定原理(像素点与三维坐标点的转换)
  14. MHA与PXC的区别
  15. 利用matlab实现h 控制,利用Matlab实现H∞控制
  16. vue3状态管理工具 pinia的使用
  17. 【报告分享】 2020年中国互联网医疗研究报告-36kr(附下载)
  18. 【运筹优化】GA遗传算法求解TSP问题(Java实现)
  19. Pytorch实现自编码器
  20. fedora 下 wine 运行酷我音乐盒

热门文章

  1. Screenlets的配置文件天文钟
  2. 城市应急管理总体建设内容·拟稿
  3. 供应链金融(一):商业保理产品架构介绍
  4. 5-24V蓝牙音箱芯片FP5207XR-G1大功率升降压DC-DC外置MOS
  5. sqlite函数大全
  6. 前端好书推荐(内含福利)
  7. TKDE 2020 | 综述:基于知识图谱的推荐系统
  8. 管理信息系统需要哪些计算机基础,管理信息系统以先进的计算机系统为物质基础,不需要人工参与。...
  9. Ubuntu18.04安装sumo的三种方式
  10. android 拦截音量键,Android 音量键增大减小捕捉