目录

1、介绍

2、ShardingJDBC

3、入门案例

4、测试

4.1 增加

4.2 删除

4.3 修改

4.4 查询


1、介绍

面对日益增加的系统访问量,数据库的吞吐量面临着巨大的瓶颈,可能有些服务器性能好,有些服务器的性能不好,我们就可以将数据库拆分为主库和从库,教程在这里:

(1条消息) MySQL 主从复制_一切总会归于平淡的博客-CSDN博客

主库负责处理事务性的增删改操作,从库负责处理查询操作,从而实现读写分离的操作。

通过读写分离,就可以降低单台数据库的访问压力, 提高访问效率,也可以避免单机故障。

介绍完读写分离,那我们就要想,在项目中,如何通过Java 代码来完成读写分离呢,如何在执行SELECT的时候查询从库,而在执行INSERT、UPDATE、DELETE的时候,操作主库呢?这个时候,我们就需要介绍一个新的技术 ShardingJDBC。

2、ShardingJDBC

Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。

它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

Sharding-JDBC具有以下几个特点:

适用于任何基于JDBC的ORM框架

JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

支持任何第三方的数据库连接池

DBCP, C3P0, BoneCP, Druid, HikariCP等。

支持任意实现JDBC规范的数据库

目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

pom 依赖:

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency>

接下来我们就做一个小案例,首先我们要把我们MySQL主从复制配置,教程在开篇已经提供给各位了。

3、入门案例

首先我们要在项目pom 文件中引入依赖。

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency>

然后在yml 文件中配置数据源。

server:port: 8080
spring:shardingsphere:datasource:names:master,slave # 数据源的名称master,slave是可以随意定义的,不是固定的# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.231.134:3306/rw?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: root# 从数据源sla ve:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.231.134:3306/rw?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: rootmasterslave:# 读写分离配置load-balance-algorithm-type: round_robin #轮询 如果有多个从库,从库的负载均衡策略# 最终的数据源名称name: dataSource# 主库数据源名称master-data-source-name: master #主库数据库名称# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slave #从库数据库名称props:sql:show: true #开启SQL显示,默认falsemain:allow-bean-definition-overriding: true # 允许如果当前项目中存在同名的bean,后定义的bean会覆盖先定义的
mybatis-plus:configuration:#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:id-type: ASSIGN_ID

4、测试

我们使用shardingjdbc来实现读写分离,直接通过上述简单的配置就可以了。

配置完毕之后,我们就可以重启服务,通过postman来访问controller的方法,来完成用户信息的增删改查,我们可以通过debug及日志的方式来查看每一次执行增删改查操作,使用的是哪个数据源,连接的是哪个数据库。

4.1 增加

从控制台输入日志看,它确实做的是主库master

4.2 删除

控制台输出日志,可以看到操作master主库:

4.3 修改

控制台输出日志,可以看到操作master主库:

4.4 查询

控制台输出日志,可以看到操作slave从库:

若有收获,就点个赞吧

Java 实现数据库读写分离竟如此简单?相关推荐

  1. Java实现数据库读写分离

    java读写分离的实现 1.  背景 我们一般应用对数据库而言都是"读多写少",也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案, 其中一个是主库,负责写入 ...

  2. 简单好用!利用Spring AOP技术10分钟实现一个数据库读写分离方案

    前言 最近我们的APP在线用户越来越多,接口的响应速度也是越来越慢,经过运维排查发现是由于并发查询太多导致的数据库压力比较大,架构师经过调研给出了数据库读写分离的解决方案,为了快速解决问题,我们最终采 ...

  3. java spring mysql配置_java相关:mysql+spring+mybatis实现数据库读写分离的代码配置

    java相关:mysql+spring+mybatis实现数据库读写分离的代码配置 发布于 2020-4-4| 复制链接 分享一篇关于关于mysql+spring+mybatis实现数据库读写分离的代 ...

  4. mysql读写分离java配置方法_springboot配置数据库读写分离

    为什么要做数据库读写分离 大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用 ...

  5. 学会数据库读写分离、分表分库

    https://www.cnblogs.com/joylee/p/7513038.html 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优 ...

  6. Spring 实现数据库读写分离

    Spring 实现数据库读写分离 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然 ...

  7. [转]Spring数据库读写分离

    数据库的读写分离简单的说是把对数据库的读和写操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力. 主(master)数据库提供写操作,从(slave)数据库提供读操作,其实在 ...

  8. Spring - 数据库读写分离

    文章目录 Spring - 数据库读写分离 1.读写分离解决方案 1.1 应用层解决 1.2 中间件解决 2.Mysql主从配置 2.1 Mysql主从复制原理 2.2 Master主库配置 2.3 ...

  9. jedis 读写分离_Redis实现数据库读写分离

    Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的速度是81000次/s,性能很高,使用范围也很广. 下面用一个实例实现re ...

最新文章

  1. unity编辑器扩展_01(在工具栏中创建一个按钮)
  2. 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
  3. 有关ArcGIS Server Server URL问题
  4. 荐书 | 10本书给你计算机大师思维
  5. Angular最新教程-第六节编写响应式导航栏
  6. 血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息
  7. 4.kafka的安装部署
  8. 硬盘损坏如何恢oracle,硬盘物理损坏,如何恢复数据库?
  9. excel工具箱_Excel工具箱15.54安装教程
  10. python3解析库pyquery
  11. 政务OA协同办公系统,助力数字政府建设
  12. 三阶魔方还原公式图解记忆
  13. 鸿蒙系统pc版 硬件要求,原神全平台配置要求 原神配置需求一览
  14. 场地测量的方法和程序_施工测量的基本方法
  15. python--我的大花莽【turtle画】
  16. (Tiled官方文档翻译)第一节:简介及创建工程、图层集
  17. 【机房收费系统个人版】三层登陆
  18. 幼儿抽象逻辑思维举例_【干货】教师资格《幼儿保教知识与能力》重点归纳一...
  19. 服务器装win7自动关机,Win7系统常见的3种自动关机原因及解决方法
  20. TiDB 报错: GC life time is shorter than transaction duration

热门文章

  1. 哪个牌子蓝牙耳机打电话清晰?通话最清晰的蓝牙耳机推荐
  2. 马平福为华侨创作中国书法艺术品受好评
  3. 高手diy android控制的智能蓝牙led灯,高手DIY Android控制智能蓝牙LED灯
  4. UR_RTDE 在Linux安装与使用过程中遇到 一些坑
  5. 阿德莱德大学计算机专业学费,阿德莱德大学本科及研究生学费是多少(含各专业学费)?...
  6. 微信小程序openid如何获得IP白名单的方法
  7. python以读写方式打开文件_Python读写文件
  8. Jupyter Notebook打开Python文件的方法
  9. 如何将Nginx的版本号隐藏
  10. 【笔记】cocos2dx xxtea逆向获取lua脚本和资源文件