如何通过ShardingJDBC进行读写分离

news2025/3/12 12:32:56
  1. 背景信息:
    1. 面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作,从库负责处理查询操作,这样就能够有效的避免因数据更新导致的行锁,进而使得整个系统的查询性能得到极大的改善。
    2. 那么我们在项目中,可以使用ShardingJDBC框架,通过Java代码来完成读写分离,这样就可以在执行select的时候查询从库,在执行insert、update、delete的时候,操作主库了。
  2. ShardingJDBC的介绍
    1. Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
      1. 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC
      2. 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等
      3. 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库
    2. 通过使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离
  3. 环境准备
    1. 部署主从复制的两台MySQL服务器
    2. 并将MySQL服务正常启动
    3. 在MySQL数据库中的主库中正常创建自己需要的数据库以及相关的数据库表,从库会自动同步相应的数据,所以不用操作从库
  4. java项目使用Sharding-JDBC进行读写分离配置
    1. 在maven项目的pom.xml文件中增加Sharding-JDBC的maven坐标
      1. <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>
    2. 在spring boot项目的application.yml中增加数据源的配置信息
      1. spring:
        #  datasource:
        #    druid:
        #      driver-class-name: com.mysql.cj.jdbc.Driver
        #      url: jdbc:mysql://localhost:3333/study-pro?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        #      username: root
        #      password: 123456
        
          shardingsphere:
            datasource:
              # 数据源的名称,可以随意定义,但是需要和下面所设定的配置一致
              names:
                master,slave
              # 主数据源
              master:
                type: com.alibaba.druid.pool.DruidDataSource
                driver-class-name: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
                username: root
                password: 123456
              # 从数据源
              slave:
                type: com.alibaba.druid.pool.DruidDataSource
                driver-class-name: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
                username: root
                password: 123456
            # 读写分离配置
            masterslave:
              # 负载均衡算法名称:轮询。如果有多个从库时的负载均衡策略。round_robin(轮询)和random(随机)
              load-balance-algorithm-type: round_robin
              # 最终的数据源名称
              name: shardingDataSource
              # 主库数据源名称
              master-data-source-name: master
              # 从库数据源名称列表,多个逗号分隔
              slave-data-source-names: slave
            props:
              sql:
                # 开启SQL显示,默认false
                show: true
          main:
            # 如果当前项目中存在同名的bean,后定义的bean会覆盖先定义的。因为一个同名的 dataSource 的bean在com.alibaba.druid.spring.boot.autoconfigure包下的DruidDataSourceAutoConfigure类加载时已经声明了,所以我们需要用到的是 ShardingJDBC包下的dataSource,所以我们需要配置上述属性,让后加载的覆盖先加载的
            allow-bean-definition-overriding: true
    3. 注意
      1. 在application.yml文件中添加spring.main.allow-bean-definition-overriding=true的配置,这是为了如果当前项目中存在同名的bean,后定义的bean会覆盖先定义的
      2. 若在sharding-jdbc、mybatis、druid中使用时,请选择下列jar包得搭配方式,不然将会导致sqlSessionFactory不能正常初始化,无法正常启动服务,可选择下列搭配方式
        1. sharding-jdbc4.0.0-RC1应搭配 mybatis、druid-spring-boot-starter使用
        2. sharding-jdbc4.0.0-RC2以上版本应搭配 mybatis、com.alibaba.druid(非spring boot版本)使用
  5. 功能测试
    1. 在增删查改的逻辑下若控制台打印相应的sharding-jdbc的SQL日志,并且功能正常使用,则证明已经成功搭建好读写分离
  6. 官方参考文档
    1. 概览 :: ShardingSphere (apache.org)
    2. shardingsphere/examples at master · apache/shardingsphere (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1252578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在家无聊想获取收益?这几种副业项目分享给你

总会有在家无聊的时候&#xff0c;特别是一些很“宅”的人。厌倦了一些娱乐方式后&#xff0c;想起生活经济上的压力&#xff0c;这时候就会想到要做些什么获取收益。 是的&#xff0c;不用出门&#xff0c;不用和别人面对面交流&#xff0c;时间自由可控&#xff0c;这就是在家…

链表?细!详细知识点总结!

链表 定义&#xff1a;链表是一种递归的数据结构&#xff0c;它或者为空&#xff08;null)&#xff0c;或者是指向一个结点&#xff08;node&#xff09;的引用&#xff0c;该结点含有一个泛型的元素和一个指向另一条链表的引用。 ​ 其实链表就是有序的列表&#xff0c;它在内…

AD9361纯逻辑控制从0到1连载10-多芯片同步MCS以及射频同步方法

本文基于ZC706FMCOMMS5的平台&#xff0c;介绍了AD9361的多芯片同步设计方法。这里的“同步”包含了基带同步以及射频同步。AD9361原生只支持基带同步&#xff0c;官方的名称叫MCS&#xff08;Multi-chip Baseband Synchronization &#xff09;&#xff0c;实际上配合外围的射…

⑧【HyperLoglog】Redis数据类型:HyperLoglog [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis HyperLoglog ⑧Redis HyperLoglog基本操…

智能汽车十大网络安全攻击场景-《智能汽车网络安全权威指南》

引言 大家都很熟悉OWASP Top 10风险报告&#xff0c;这个报告不但总结了Web应用程序最可能、最常见、最危险的10大安全隐患&#xff0c;还包括了如何消除这些隐患的建议&#xff0c;这个“OWASP Top 10“差不多每隔三年更新一次。目前汽车网络安全攻击威胁隐患繁多&#xff0c…

Jenkins用126邮箱发邮件为什么发不出去

1、检查 Jenkins Location中的邮件地址配置与发邮件的地址配置是否一致 Manage Jenkins -》 system 2、检查地址和端口号 3、检查邮箱的登录配置是否正确&#xff08;这个地方的配置方式网上一抓一大把&#xff0c;自己搜一下就好&#xff09; 4、126邮箱发邮件不需要勾选ssl协…

JSP:MVC

一个好的Web应用&#xff1a; 功能完善、易于实现和维护易于扩展等的体系结构 一个Web应用通常分为两个部分&#xff1a; 1. 由界面设计人员完成的表示层&#xff08;主要做网页界面设计&#xff09; 2. 由程序设计人员实现的行为层&#xff08;主要完成本Web应用的各种功能…

基于springboot网上超市管理系统

基于springboot网上超市管理系统 摘要 随着互联网的快速发展&#xff0c;电子商务行业迎来了蓬勃的发展&#xff0c;网上超市作为电子商务的一种形式&#xff0c;为消费者提供了便利的购物体验。本文基于Spring Boot框架&#xff0c;设计和实现了一个网上超市管理系统&#xff…

C语言—冒泡排序

方法一&#xff08;不使用函数解决&#xff09; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{15,52,23,0,5,6,45,8,9,10};int i0;int j0;for ( i 0; i < 9; i){int flag1; //flag判断数组元素是否有序&#xff0c;这里先假设…

动手学深度学习(四)---多层感知机

文章目录 一、理论知识1.感知机2.XOR问题3.多层感知机4.多层感知机的从零开始实现 【相关总结】1.torch.randn()2.torch.zeros_like() 一、理论知识 1.感知机 给定输入x,权重w&#xff0c;和偏移b,感知机输出&#xff1a; 2.XOR问题 感知机不能拟合XOR问题&#xff0c;他…

Javaweb之Vue组件库Element的详细解析

4 Vue组件库Element 4.1 Element介绍 不知道同学们还否记得我们之前讲解的前端开发模式MVVM&#xff0c;我们之前学习的vue是侧重于VM开发的&#xff0c;主要用于数据绑定到视图的&#xff0c;那么接下来我们学习的ElementUI就是一款侧重于V开发的前端框架&#xff0c;主要用…

辅助驾驶功能开发-系统方案篇-地平线超级驾驶解决方案介绍

01.产品方案 Horizon Matrix SuperDrive超级驾驶解决方案,助力汽车智能化步入人机共驾时代 SuperDrive超级驾驶解决方案,全面整合了自动驾驶、智能交互、云端大脑三大模块,形成完整的泛车载AI人工智能系统,帮助整车智能化提升到一个新的高度。该方案的核心硬件-车载中央计…

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

基于python+Django+SVM算法模型的文本情感识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 简介2. 技术栈3. 系统架构4. 关键模块介绍5. 如何运行 二、功能三、系统四. 总结 一项目简介 # 基于 Python Django SVM 算法模型的文本情感识别系统介…

2023年最新IntelliJ IDEA下载安装以及Java环境搭建教程(含Java入门教程)

文章目录 写在前面Java简介IntelliJ IDEA简介IntelliJ IDEA下载安装JDK简介JDK下载教程 Java入门IntelliJ IDEA使用教程 写在后面 写在前面 2023年最新IntelliJ IDEA下载安装教程&#xff0c;内含JAVA环境搭建教程&#xff0c;一起来看看吧&#xff01; Java简介 Java是一门…

【数据库】聊聊一颗B+树 可以存储多少数据

我们知道数据库使用的数据结构是B树&#xff0c;但是B树可以存储多少数据呢&#xff0c;在面试中也是经常会问的问题&#xff0c;所以我们从根上理解这个问题。 操作系统层面 数据都是存储在磁盘中的&#xff0c;而磁盘中的数据都是以最新单位扇区进行分割。一个扇区的大小是…

C++初阶(十二)string的模拟实现

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、string类的模拟实现1、构造、拷贝构造、赋值运算符重载以及析构函数2、迭代器类3、增删查…

3.1 CPU内部结构与时钟与指令

CPU内部结构 总线一些自定义部件总线图内存指令执行流程:取指令,译码,执行pc做的事内存地址寄存器内存缓存寄存器指令寄存器,译码第一步指令寄存器传递地址到内存地址寄存器指令MOV_A的过程(译码第二步)第一条指令执行完毕第三条指令的执行第四条指令第四条指令不同的执行流程…

java容器

cow容器 copy on write 又被成为写时复制(读写分离)容器, 原理就是: 如果向一个数组中添加元素的时候,会将原来的数组复制一份为新的数组,原来的数组不会动,负责读处理,然后在新的数组中进行添加操作,添加完后,将新数组的地址,赋值给原来数组的地址 这种设计的好处是什么呢?…

x86 汇编语言介绍001

1&#xff0c;搭建编程环境 1.1 NASM 基本信息 示例使用的汇编器为 nasm 主页&#xff1a; https://www.nasm.us/https://www.nasm.us/ 下载最新的稳定版源代码 wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz 1.2解压并编译安装 tar zx…