ShardingSphere应⽤专题--4.1.1版本--Sharding-JDBC读写分离(五)
前⾔:
1.基础的环境介绍请移步
你可以同时打开两个页⾯,避免因查原始配置上下翻动。
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.tions.size.per.query=3
spring.shardingsphere.datasource.names=master,slave
spring.shardingsphere.pe=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.sql.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.pe=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave.sql.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=#从库负载均衡算法类型,可选值:RO UND_ROBIN,RANDOM。若`load-balance-algorithm-class-name`存在则忽略该配置
spring.shardingsphere.props.sql.show=#是否开启SQL显⽰,默认值: false
spring.utor.size=#⼯作线程数量,默认值: CPU核数
spring.shardingsphere.props.abled=#是否在启动时检查分表元数据⼀致性,默认值: false
mysql操作官方文档补充:
1.从库除了按照官⽅配置使⽤[x]这种数组⽅式,还可以多个⽤英⽂‘,’隔开:.slave-data-source-names=aaa,bbb,ccc
5.使⽤说明
1.sharding-jdbc(如⾮特别声明均指ShardingSphere中的jdbc模块)只解决应⽤数据主从及分⽚问题,数据库从如何从主库复制数据(主从复制)是运维层⾯的问题,sharding-jdbc并不⽀持。
2.开启读写分离后,同⼀线程且同⼀数据库连接内,如有写⼊操作,以后的读操作均从主库读取,⽤于保证数据⼀致性。
3.可以使⽤【】,⽐如强制⾛主库或从库等—具体见Hint专题章节(TODO)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论