ShardingSphere应用专题--4.1.1版本--Sharding-JDBC读写分离(五)

26 篇文章 3 订阅
18 篇文章 4 订阅

前言:

1.基础的环境介绍请移步ShardingSphere应用专题–4.1.1版本–sharding jdbc环境搭建(四)
你可以同时打开两个页面,避免因查找原始配置上下翻动。

2.ShardingSphere官方文档更新不及时,很容易踩坑。贴出的4.x版本文档实际是4.0.1版本的,如果你准备使用该版本可以参考官方文档。本文使用的是此时最新的正式版本4.1.1版本,配置与官方文档配置不同。事实上,源码中有非常详细的版本配置文档,本文也是参考4.1.1 tag的源码配置。

3.ShardingSphere各版本差异很大,甚至核心依赖的包名都不一样,使用时,一定要确认使用哪个版本,目前调研的结果:3.x、4.0.1、4.1.1、5.0.0-alpha都存在很大的配置差异

1.pom添加ShardingSphere依赖
<dependency>
		<groupId>org.apache.shardingsphere</groupId>
		<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
		<version>4.1.1</version>
</dependency>
2.添加读写分离环境配置application-sharding-rw.properties

#打印sql
spring.shardingsphere.props.sql.show=true
#设置单次请求可适用的最大线程数,以决定是线程限制还是内存限制。增大该参数可提高数据库元数据加载速度(默认为1)
spring.shardingsphere.props.max.connections.size.per.query=3

spring.shardingsphere.datasource.names=master,slave

spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://localhost:4406/mydb?characterEncoding=utf-8
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=111

spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.slave.jdbc-url=jdbc:mysql://localhost:5506/mydb?characterEncoding=utf-8
spring.shardingsphere.datasource.slave.username=root
spring.shardingsphere.datasource.slave.password=111

#指定master为主库,slave为它的从库
spring.shardingsphere.sharding.master-slave-rules.master0.master-data-source-name=master
spring.shardingsphere.sharding.master-slave-rules.master0.slave-data-source-names=slave
配置说明:

在这里插入图片描述
1.spring.shardingsphere.datasource.names 这里的数据源名称是自定义的

2.在配置数据源的基本属性时,标注的位置必须是1中定义的

3.本文选的连接池是HikariDataSource,如果使用的是druid,这里的配置就不是jdbc-url,而是url。且不同数据库连接池,对应的start的兼容度可能不一样,需要自己调试。springboot官方推荐使用Hikari

4.这里是主从配置的名称,同样是自定义的,你可以配置多个主从复制的配置

5.和1中的数据源名称保持一致,否则报错

3.代码测试
(1)插入

在这里插入图片描述
shardingspere的log会打印出逻辑sql和实际执行的sql,可以看到最终走的是主库

(2)查询

在这里插入图片描述
查询走的是从库

4详细示例
#省略数据源配置,与数据分片一致

spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.master-data-source-name= #主库数据源名称
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.slave-data-source-names[0]= #从库数据源名称列表
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.slave-data-source-names[1]= #从库数据源名称列表
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.slave-data-source-names[x]= #从库数据源名称列表
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.load-balance-algorithm-class-name= #从库负载均衡算法类名称。该类需实现MasterSlaveLoadBalanceAlgorithm接口且提供无参数构造器
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.load-balance-algorithm-type= #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`load-balance-algorithm-class-name`存在则忽略该配置

spring.shardingsphere.props.sql.show= #是否开启SQL显示,默认值: false
spring.shardingsphere.props.executor.size= #工作线程数量,默认值: CPU核数
spring.shardingsphere.props.check.table.metadata.enabled= #是否在启动时检查分表元数据一致性,默认值: false

补充:
1.从库除了按照官方配置使用[x]这种数组方式,还可以多个用英文‘,’隔开:.slave-data-source-names=aaa,bbb,ccc

5.使用说明

1.sharding-jdbc(如非特别声明均指ShardingSphere中的jdbc模块)只解决应用数据主从及分片问题,数据库从如何从主库复制数据(主从复制)是运维层面的问题,sharding-jdbc并不支持。
2.开启读写分离后,同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。

3.可以使用【强制分片路由】,比如强制走主库或从库等—具体见Hint专题章节(TODO)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值