springboot集成shardingsphere-jdbc之读写分离配置_Husky_jzq的博客-程序员宅基地

技术标签: MySQL  mysql  ShardingSphere  读写分离  

关于MySQL主从搭建,可以参考我的文章学习docker第五天之MySQL主从复制搭建_Husky_jzq的博客-程序员宅基地

首先导入相关的pom依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
        </dependency>


        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </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>

导入依赖后配置shardingsphere-jdbc的yml文件

spring:
  shardingsphere:
    # 数据源配置
    datasource:
      # 数据源名称,多数据源以逗号分隔
      names: master,slave
      master:
        # 数据库连接池类名称
        type: com.zaxxer.hikari.HikariDataSource
        # 数据库驱动类名
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
      slave:
        # 数据库连接池类名称
        type: com.zaxxer.hikari.HikariDataSource
        # 数据库驱动类名
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:端口/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
    # 规则配置
    rules:
      readwrite-splitting:
        load-balancers:
          ms:
            type: ROUND_ROBIN
            props:
              workId: 1
        data-sources:
          ms:
            type: Static
            load-balancer-name: round-robin
            props:
              write-data-source-name: master
              read-data-source-names: slave
    # 属性配置
    props:
      # 展示修改以后的sql语句
      sql-show: true
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

然后测试读写情况,读是在slave,写是在master

 

 至此,读写分离集成成功!

笔者此次读写分离是一主一从,既然读写分离就涉及事务问题。在配置成功后发现使用事务失败@Transactional。基于之前项目配置过一次双数据源和本次读写分离的形式,笔者认为,既然是一主一从,按理说只需要指定主库进行事务即可(因为从库会同步主库)。所以在进行相关查阅后,进行事务管理器的配置,指定@Transactional的事务为主库事务即可。相关配置如下:

 

 进过测试,事务成功

 主库数据

 从库数据

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GINNOSQL/article/details/123877203

智能推荐

C语言合运算不同类型之间的混合运算_c语言不同类型数据的混合运算-程序员宅基地

+、-、*、/运算的两个数中有一个数为float或double型,结果为double型,因为系统将所有的float型数据转换为double类型数据再进行计算。如果int型与float或double型数据进行计算,先把int型和float型数据转换为double数据在进行计算,结果为double型。字符(char)型数据与整形数据计算,及时把char型数据的ASCLL代码与整形数据进行计算。如..._c语言不同类型数据的混合运算

Java将int型数组转为String型数组_java int数组转换成string-程序员宅基地

算法题:判定一个int类型数组中一共有多少个具体的数字?1. 算法题目:2. 具体思路3. 代码实现4. 运行结果1. 算法题目:判定一个int类型数组中一共有多少个数字3.比如{3,31,2,133}一共有4个32. 具体思路Java将int型数组转为String型数组3. 代码实现import java.util.Scanner;public class ConvertIntIntoString { public static void main(String[] args)_java int数组转换成string

RK3568-ANDROID11-4G-EC20-调试篇(移远模块)-程序员宅基地

首先,要先获得技术支持步骤一,先在USB模块上完成4G步骤二,移植到PCIE座子上磨刀不费砍材功,请先拿到技术文档支持,我的参考是:Quectel_Android_RIL_Driver_V3.3.62_master_beta(支持EC200A).tgz主要文件:Quectel_Android_RIL_Driver_V3.3.62_master_beta(支持EC200A)\libquectel-ril\arm64-v8a\libreference-ril.so主要文档:Quectel_A

自然语言处理顶会 ACL2019论文接收列表_2019acl接收论文列表-程序员宅基地

就投稿数量来说,这是历史上最火的一届NLP顶会,有效投稿达到2694篇,相比去年的1544篇增加了75%。此外,本届ACL的评审质量也受到颇多吐槽。你的论文入选了吗?下表显示了每个领域的提交数量 (长论文、短论文和总数)。  其中,投稿最多的 3 个领域与 ACL 2018 相同:  信息提取和文本挖掘 (占所有有效提交的 9.2%,ACL 2018 的这一比例为 11.5%。不过..._2019acl接收论文列表

【SECS/GEM开发】-珪璠科技_java实现secs/gem-程序员宅基地

一、概述   SECS/GEM是由国际半导体设备与材料协会(SEMI)制定的连接性标准。此连接性标准用于在设备和工厂的资讯和控制系统间建立通讯。SECS是SEMI设备通讯标准的缩写。GEM指SEMI连接性标准E30,被定义为制造设备实现通讯和控制的一般模型。一般来说,SECS/GEM标准定义了信息、状态机和情境,来让工厂软件能够控制并监视制造设备。正式名称是SEMI连接性标准E3..._java实现secs/gem

最短路径(4)--poj3268(dijkstra单源最短路径变形)_算法训练营训练4 最短路径poj3268-程序员宅基地

Silver Cow Party Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %lluDescriptionOne cow from each of N _算法训练营训练4 最短路径poj3268

随便推点

PHP 构造方法 __construct()_php __construct函数-程序员宅基地

PHP 构造方法 __construct()PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法。构造方法构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一_php __construct函数

软件工程之程序编码_编码阶段 如何描述-程序员宅基地

when系统实现阶段what程序设计编码就是把软件设计阶段的成果(主要是详细设计规格说明书)使用某种计算机程序编程语言转换成计算机能够理解的形式――程序代码的过程why翻译过程所使用的计算机程序设计语言及程序员的编程风格对程序的可靠性、可读性、可测试性、可维护性等方面都将产生很大的影响从而最终影响到计算机软件系统的质量。how程序复杂性度量 _编码阶段 如何描述

MYSQL和ORACLE针对order by 语句对null字段的默认排序_order by nulls oracle mysql-程序员宅基地

【Oracle 结论】order by colum asc 时,null默认被放在最后order by colum desc 时,null默认被放在最前nulls first 时,强制null放在最前,不为null的按声明顺序[asc|desc]进行排序nulls last 时,强制null放在最后,不为null的按声明顺序[asc|desc]进行排序【MySql 结论】order..._order by nulls oracle mysql

Mac homebrew报错Error: homebrew-core is a shallow clone._你不知道我有多菜的博客-程序员宅基地

Mac homebrew报错Error: homebrew-core is a shallow clone.解决方法删除homebrew-core后更新即可cd /usr/local/Homebrew/Library/Taps/homebrewrm -rf homebrew-corebrew upgrade使用brew upgrade后会重新更新homebrew-core问题解析Mac更新完系统后使用homebrew就报错:Error: homebrew-core is a shal

Java 模拟cookie登陆_java 模拟登录,获得cookie-程序员宅基地

最近在做将禅道上的功能接口做到手机端,在做登陆的时候,看了禅道的源码,是由cookie来登陆,所以要做一个模拟cookie登陆的接口,将拿到的cookie放到每次接口请求的头部中去,就可以正常访问了。 import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.n..._java 模拟登录,获得cookie

利用”android:process”属性让同一Application中的Service组件运行在不同的进程中_android进程不一致-程序员宅基地

默认情况下,无论是通过startService还是bindService启动同一Application的Service组件,都是运行在该Application的同一进程中。然而,很多时候我们希望该Service组件可以运行在不同的进程中,这样的目的往往是为了让其与该Application拥有独立的运行环境,可以避免类似因为Service的crash导致Application也被crash的问题发生..._android进程不一致

推荐文章

热门文章

相关标签