如何通过ShardingJDBC进行读写分离

  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: 123456shardingsphere:datasource:# 数据源的名称,可以随意定义,但是需要和下面所设定的配置一致names:master,slave# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: 123456# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.xxx.xxx:3306/study-pro?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: 123456# 读写分离配置masterslave:# 负载均衡算法名称:轮询。如果有多个从库时的负载均衡策略。round_robin(轮询)和random(随机)load-balance-algorithm-type: round_robin# 最终的数据源名称name: shardingDataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slaveprops:sql:# 开启SQL显示,默认falseshow: truemain:# 如果当前项目中存在同名的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.mzph.cn/news/169939.shtml

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

相关文章

实验题【网关设置+VRRP+OSPF】(H3C模拟器)

嘿&#xff0c;这里是目录&#xff01; ⭐ H3C模拟器资源链接1. 实验示意图2. 要求和考核目标3. 当前配置3.1 PC1、PC2、PC3、PC4和PC5配置3.2 SW配置3.2.1 SW2配置3.2.2 SW3配置3.2.3 SW4配置3.2.4 SW1配置 3.2. R配置3.2.1 R1配置3.2.2 R2配置 ⭐ H3C模拟器资源链接 H3C网络…

微服务学习|初识MQ、RabbitMQ快速入门、SpringAMQP

初识MQ 同步通讯和异步通讯 同步通讯是实时性质的&#xff0c;就好像你用手机与朋友打视频电话&#xff0c;但是&#xff0c;别人再想与你视频就不行了&#xff0c;异步通讯不要求实时性&#xff0c;就好像你用手机发短信&#xff0c;好多人都能同时给你发短信&#xff0c;你…

xadmin后台在每一行记录增加一个复制链接按钮

xadmin后台在每一行记录增加一个复制链接按钮 1、效果 点击复制后,自动把url链接复制到粘贴板,按Ctrl+v即可显示复制内容。 2、实现代码 adminx.py # 用户管理 class UserWhiteListAdmin(object):search_fields = [name, mobile] # 检索字段list_display

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

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

Fedora 36 ARM 镜像源更换与软件安装

1、什么是Fedora Fedora Linux是较具知名度的Linux发行套件之一&#xff0c;由Fedora专案社群开发、红帽公司赞助&#xff0c;目标是建立一套新颖、多功能并且自由的作业系统。 Fedora是商业化的Red Hat Enterprise Linux发行版的上游原始码。 2、Fedora软件安装 64 位 .deb&a…

elementPlus之home页面布局

可以根据自己喜欢的格式选择 现在 header 部分 Aside 部分 Main部分 加上背景色以及命名 <template><div class="common-layout"><el-container><el-header class="homeHeader"><div class="headerTitle">Dev…

栈和队列的实现(详解+图解!文末附完整代码)

栈 栈的基本概念 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈的…

macos安装小软件 cmake

一&#xff0c;cmake下载主页 Download CMake 二&#xff0c;下载&#xff0c;解压&#xff0c;配置&#xff0c;编译&#xff0c;安装 0. 假设macos中已经存在了 clang和make工具 1. 通过网页下载最新的稳定版 cmake***.tar.gz 源代码 2. tar zxf cmake***.tar 3. cd cmake***…

iOS强引用引起的内存泄漏

项目中遇到一个问题&#xff1a; 1.在A页面的ViewDidLoad 方法里写了一个接收通知的方法&#xff0c;如下图&#xff1a; 然后在B页面发送通知 &#xff08;注&#xff1a;下图的NOTI 是 [NSNotificationCenter defaultCenter] 的宏&#xff0c; 考虑一下可能有小白看这篇文章…

道高一尺,魔高一丈!Python爬虫与反爬虫大战见此回分晓?

文章目录 前言一、重新理解爬虫中的一些概念二、反爬虫的目的三、爬虫与反爬虫大战关于Python及爬虫技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试…

【从浅识到熟知Linux】基本指定之zip、unzip和tar

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;周五写博客更刺激了&#xff0c;想到明天可以晚起床半小时&#xff0c;瞬间精神抖擞。再写它10篇博客。 文章前言&#xff1a;本文介绍zip…

连接docker swarm和凌鲨

docker swarm相比k8s而言&#xff0c;部署和使用都要简单很多&#xff0c;比较适合中小研发团队。 通过连接docker swarm和凌鲨&#xff0c;可以让研发过程中的常用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 使用步骤 部署swarm proxy 你可以通过linksaas…

手撕AVL_二叉平衡树(图文并茂)

目录 前言 一 . AVL树的概念 二 . AVL树节点的定义 三 . AVL树的插入 1.插入节点 2.调节负载因子 四 . AVL树的旋转 1.左单旋 2.左右双旋 五 . AVL树性能分析 总结 前言 大家好,今天带大加手撕AVL树的插入 一 . AVL树的概念 二叉搜索树虽可以缩短查找的效率&#x…

2023年【安全员-C证】考试试卷及安全员-C证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证考试试卷是安全生产模拟考试一点通生成的&#xff0c;安全员-C证证模拟考试题库是根据安全员-C证最新版教材汇编出安全员-C证仿真模拟考试。2023年【安全员-C证】考试试卷及安全员-C证试题及解析 1、【多选…

鸿蒙(HarmonyOS)应用开发——生命周期、渲染控制、状态管理装饰器

生命周期 任何程序都是有一定的生命周期的。生命周期是记录从产生到销毁的过程&#xff1b;如果熟悉前端vue.js的话&#xff0c;就可以很好的理解生命周期。 自定义组件生命周期 ArkTS中&#xff0c;自定义组件提供了两个生命周期函数&#xff1a;aboutToAppear() 和aboutTo…

【数据集】全网最全的常见已公开医学影像数据集

目录 一&#xff0c;极市医学数据集汇总 1.CT 医学图像 ​编辑 2.恶性与良性皮肤癌 3.白内障数据集 4.胸部 X 光图像&#xff08;肺炎&#xff09; 5.用于图像增强的内窥镜真实合成曝光过度和曝光不足帧 6.医学家 7.乳房组织病理学图像 8.皮肤癌 MNIST&#xff1a;HA…

cephadm部署ceph quincy版本

环境说明 IP主机名角色 存储设备 192.168.2.100 master100 mon,mgr,osd,mds,rgw 大于5G的空设备192.168.2.101node101mon,mgr,osd,mds,rgw大于5G的空设备192.168.2.102node102mon,mgr,osd,mds,rgw大于5G的空设备 关闭防火墙 关闭并且禁用selinux 配置主机名/etc/hosts …

JAVA之异常详解

1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 1. 算术异常 public class Test {public static void main(String[] args) {System.out.println(10/0);} } 因为 0 不能当被除数&#xff0c;所以报出了异常&#…

JSP宾馆预定管理系统数据库设计过程ER图

**Hi**&#xff0c;今天给大家带来一款使用JSP和Servlet开发的宾馆预定管理系统的论文写作指导。需要使用本项目写文档的童鞋可以好好看看文末附项目的效果查看地址哦~ 一、项目功能 具体的功能看下面这张表&#xff0c;表里面只是截取了主要功能来说的。 员工角色管理员角色员…

JS事件代理(事件委托)

JS事件代理&#xff08;事件委托&#xff09; 前言什么是事件代理事件代理的优点 事件代理实例代码实例&#xff1a; 总结 前言 本文详细讲解JavaScript中关于事件代理技术相关的内容以及源码实例的讲解。那么好&#xff0c;本文正式开始 什么是事件代理 事件代理作为JavaSc…