Featured image of post ShardingSphere在SringBoot中的使用

ShardingSphere在SringBoot中的使用

SpringBoot整合ShardingSphere实现读写分离

在SpringBoot项目中使用ShardingSphere实现读写分离

ShardingSphereApache公司到顶级项目,可以将任意数据库转换为分布式数据库,可以通过数据分片、弹性伸缩、读写分离等能力对原有数据库进行增强。

ShardingSphere-JDBC定位为轻量级Java框架,在Java对JDBC层提供服务。

  • 适用于任何基于JDBC的ORM框架,JPA、MyBatis、Spring JDBC Template等
  • 支持数据库连接池,官方默认使用和SpringBoot集成的HikariCPDruid数据源支持在5.1之后的版本有问题,会造成程序无法启动。
  • 支持任意实现JDBC规范的数据库。

官方文档地址

整合ShardingSphere-JDBC

ShardingSphere-JDBC官方支持使用yaml和Java API的方式进行配置,yaml的配置最终会转为Java API形式。

ShardingSphere-JDBC在5.3版本没有提供spring-boot-starter,需要按照官方文档的配置方式进行配置。

截屏2023-01-05 13.46.04

SpringBoot整合ShardingSphere-JDBC

此方法不适用于5.3及之后的版本

  1. 引入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>
    
  2. 编写application.yml配置文件,只配置读写分离

    数据源不能使用Druid

     1
     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
    47
    
    spring:
      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
    
  3. 启动项目,查看控制台SQL语句

    截屏2023-01-05 13.56.17

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

使用 CC BY-NC-SA 4.0 许可协议
苟利国家生死以 岂因福祸避趋之
Built with Hugo
主题 StackJimmy 设计