image

ShardingSphere在SringBoot中的使用

  • WORDS 2099

在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,需要按照官方文档的配置方式进行配置。

Description

SpringBoot整合ShardingSphere-JDBC

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

  1. 引入 shardingsphere-jdbc-core-spring-boot-starter依赖

    <dependency>
     <groupId>org.apache.shardingsphere</groupId>
     <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
     <version>5.2.1</version>
    </dependency>
    
  2. 编写application.yml配置文件,只配置读写分离

    数据源不能使用 Druid

    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语句

    Description

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

关联文章

0 条评论