在SpringBoot项目中使用ShardingSphere实现读写分离
ShardingSphere是Apache公司到顶级项目,可以将任意数据库转换为分布式数据库,可以通过数据分片、弹性伸缩、读写分离等能力对原有数据库进行增强。
ShardingSphere-JDBC定位为轻量级Java框架,在Java对JDBC层提供服务。
- 适用于任何基于JDBC的ORM框架,JPA、MyBatis、Spring JDBC Template等
- 支持数据库连接池,官方默认使用和SpringBoot集成的
HikariCP。Druid数据源支持在5.1之后的版本有问题,会造成程序无法启动。 - 支持任意实现JDBC规范的数据库。
整合ShardingSphere-JDBC
ShardingSphere-JDBC官方支持使用yaml和Java API的方式进行配置,yaml的配置最终会转为Java API形式。
ShardingSphere-JDBC在5.3版本没有提供spring-boot-starter,需要按照官方文档的配置方式进行配置。

SpringBoot整合ShardingSphere-JDBC
此方法不适用于5.3及之后的版本
-
引入
shardingsphere-jdbc-core-spring-boot-starter依赖1 2 3 4 5<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.2.1</version> </dependency> -
编写application.yml配置文件,只配置读写分离
数据源不能使用
Druid1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47spring: main: # 允许bean覆盖 推荐打开 allow-bean-definition-overriding: true shardingsphere: datasource: # 数据源名称 多个数据源用,号隔开 names: master,slave # 单独配置每个数据源 master: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: 'jdbc:mysql://localhost:3307/reggie' username: root password: admin slave: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: 'jdbc:mysql://localhost:3308/reggie' username: root password: admin props: # 开启sql显示 执行sql语句时 会打印sql到控制台 sql-show: true # 规则配置 rules: # 配置读写分离 readwrite-splitting: # 负载均衡算法 load-balancers: # 自定义名称 round-robin: # 使用轮询 type: ROUND_ROBIN # 数据源配置 data-sources: # 自定义名称 ms: # 读写分离类型 这里是静态 static-strategy: # 写操作的数据库 上面的数据源名称 write-data-source-name: master # 写操作的数据库 数组类型 可以定义多少 read-data-source-names: - slave # 负载均衡算法名称 上面自定义的 load-balancer-name: round-robin -
启动项目,查看控制台SQL语句

UPDATE语句的写操作是针对master库的,SELETE读操作是针对slave库的,读写分离配置完成。