我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

这篇文章将为大家详细讲解有关SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


一.前言

这是一个基于SpringBoot整合Sharding-JDBC实现读写分离的极简教程,笔者使用到的技术及版本如下:

  • SpringBoot 2.5.2

  • MyBatis-Plus 3.4.3

  • Sharding-JDBC 4.1.1

  • MySQL8集群(看笔者前一篇文章有部署教程)

二.项目目录结构

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

三.pom文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.5.2</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>xyz.hcworld</groupId>    <artifactId>sharding-jdbc-demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>sharding-jdbc-demo</name>    <description>多数据源切换实例</description>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--   mybatis-plus依赖     -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>3.4.3</version>        </dependency>        <!--    mysql驱动    -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <scope>runtime</scope>        </dependency>        <!--  sharding-jdbc(多数据源切换)     -->        <dependency>            <groupId>org.apache.shardingsphere</groupId>            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>            <version>4.1.1</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <excludes>                        <exclude>                            <groupId>org.projectlombok</groupId>                            <artifactId>lombok</artifactId>                        </exclude>                    </excludes>                </configuration>            </plugin>        </plugins>    </build></project>

四.配置文件(基于YAML)及SQL建表语句

spring:  main:    allow-bean-definition-overriding: true  #显示sql  shardingsphere:    props:      sql:        show: true    masterslave:      #配置主从名称      name: ms      #置主库master,负责数据的写入      master-data-source-name: ds1      #配置从库slave节点      slave-data-source-names: ds2,ds3      #配置slave节点的负载均衡均衡策略,采用轮询机制,有两种算法:round_robin(轮询)和random(随机)      load-balance-algorithm-type: round_robin    sharding:      #配置默认数据源ds1 默认数据源,主要用于写      default-data-source-name: ds1    # 配置数据源    datasource:      names: ds1,ds2,ds3      #master-ds1数据库连接信息      ds1:        type: com.zaxxer.hikari.HikariDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        jdbc-url: jdbc:mysql://192.168.2.142:3307/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai        username: root        password: 123456        maxPoolSize: 100        minPoolSize: 5      #slave-ds2数据库连接信息      ds2:        type: com.zaxxer.hikari.HikariDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        jdbc-url: jdbc:mysql://192.168.2.142:3308/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai        username: root        password: 123456        maxPoolSize: 100        minPoolSize: 5      #slave-ds3数据库连接信息      ds3:        type: com.zaxxer.hikari.HikariDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        jdbc-url: jdbc:mysql://192.168.2.142:3309/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai        username: root        password: 123456        maxPoolSize: 100        minPoolSize: 5#mybatis-plus配置mybatis-plus:  type-aliases-package: xyz.hcworld.demo.model  mapper-locations: classpath*:/mapper@Componentpublic interface UserMapper  extends BaseMapper<User> {    void addUser(User user);    List<User> findUsers();}

六 .Controller及Mocel文件

package xyz.hcworld.demo.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import xyz.hcworld.demo.mapper.UserMapper;import xyz.hcworld.demo.model.User;import java.security.SecureRandom;import java.util.List;@RestController@RequestMapping("/api/user")public class UserController {    @Autowired    private UserMapper userMapper;    @PostMapping("/save")    public String addUser() {        User user = new User();        user.setNickname("zhangsan" + new SecureRandom().nextInt());        user.setPassword("123456");        user.setSex(1);        user.setBirthday("1997-12-03");        userMapper.addUser(user);        return user.toString();    }    @GetMapping("/findUsers")    public List<User> findUsers() {        return userMapper.findUsers();    }}
package xyz.hcworld.demo.model;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;import lombok.EqualsAndHashCode;@Data@TableName("t_user")public class User {    private static final long serialVersionUID = 1L;    @TableId(value = "id", type = IdType.AUTO)    private Integer id;    private String nickname;    private String password;    private Integer sex;    private String birthday;}

七.结果

从结果可以看出,写入操作全部通过ds1数据库(master)数据库完成,而读操作因为设置了轮询的缘故,由ds2(slaver)、ds3(slaver2)数据库完成。这样就实现了基于一主二从的数据库集群的读写分离操作。

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

八.Sharding-JDBC不同版本上的配置

网上Sharding-JDBC的教程多为4.0.0.RC1版本,笔者使用的是最新的4.1.1所以
在该部分数据库地址在4.1.1为jdbc-url在4.0.0.RC1上需要改为url否则会启动失败

jdbc-url: jdbc:mysql://XXXX/XXXX

关于SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离

这篇文章将为大家详细讲解有关SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.前言这是一个基于SpringBo
2023-06-20

SpringBoot怎么整合sharding-jdbc实现分库分表与读写分离

本篇内容主要讲解“SpringBoot怎么整合sharding-jdbc实现分库分表与读写分离”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么整合sharding-jdbc
2023-06-25

SpringBoot中怎么利用MyCat实现读写分离

SpringBoot中怎么利用MyCat实现读写分离,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL配置主从关系说明 192.168.0.105 Lin
2023-06-16

Sharding-JDBC自动实现MySQL读写分离的示例代码怎么编写

Sharding-JDBC自动实现MySQL读写分离的示例代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、ShardingSphere和Shard
2023-06-25

SpringBoot怎么实现读写分离

这篇文章主要讲解了“SpringBoot怎么实现读写分离”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么实现读写分离”吧!前言根据公司业务需求,项目需要读写分离,所以记
2023-06-30

怎么在java中利用spring实现读写分离

怎么在java中利用spring实现读写分离?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 背景我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较
2023-05-30

SpringBoot项目中怎么实现MySQL读写分离

这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot项目中怎么实现MySQL读写分离文章都会有所收获,下面我们一起来看看吧。1
2023-07-02

mybatis中怎么实现读写分离

本篇文章为大家展示了mybatis中怎么实现读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、spring aop实现首先application-test.yml增加如下数据源的配置spri
2023-06-20

MySQL中怎么实现主从复制及读写分离

MySQL中怎么实现主从复制及读写分离?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、相关概述主从复制:主数据库(Master)发送更新事件到从数据库(Slave),从数
2023-06-14

redis客户端怎么实现高可用读写分离

小编给大家分享一下redis客户端怎么实现高可用读写分离,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!背景(1) redis单机的读写性能轻松上大几万,不过线上环境不会只部署光秃秃的一个节点,还是会配合 sentinel
2023-06-20

编程热搜

目录