查看原文
其他

SpringBoot2.x 整合ShardingSphere5.x实现分表

点击蓝字

关注我们


前言

Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,SpringBoot整合ShardingSphere5实现分库分表。

1.ShardingSphere 简介

官网:https://shardingsphere.apache.org/index_zh.html

Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。


2.MyCat & ShardingSphere 对比



3.Spring Boot 2.x 整合 ShardingSphere 5.x实现分表

  1. 采用MySQL8.x数据库,创建数据库 shardingsphere-demo

  2. 创建表(4张结构相同的order表)

/*

Date: 24/02/2021 16:14:14*/

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;

-- ------------------------------ Table structure for t_order0-- ----------------------------DROP TABLE IF EXISTS `t_order0`;CREATE TABLE `t_order0` ( `order_id` bigint(11) NOT NULL COMMENT '订单ID', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`order_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ------------------------------ Table structure for t_order1-- ----------------------------DROP TABLE IF EXISTS `t_order1`;CREATE TABLE `t_order1` ( `order_id` bigint(11) NOT NULL COMMENT '订单ID', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`order_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ------------------------------ Table structure for t_order2-- ----------------------------DROP TABLE IF EXISTS `t_order2`;CREATE TABLE `t_order2` ( `order_id` bigint(11) NOT NULL COMMENT '订单ID', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`order_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ------------------------------ Table structure for t_order3-- ----------------------------DROP TABLE IF EXISTS `t_order3`;CREATE TABLE `t_order3` ( `order_id` bigint(11) NOT NULL COMMENT '订单ID', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`order_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  1. 创建Spring Boot工程

  2. 引入Maven依赖

<!-- ShardingSphere --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.0.0-alpha</version>  </dependency>
  1. 配置application.ym

    spring: shardingsphere: # 数据源配置 datasource: common: # 数据库驱动类名 driver-class-name: com.mysql.cj.jdbc.Driver # 数据库连接池类名称 type: com.zaxxer.hikari.HikariDataSource # 数据源名称,多数据源以逗号分隔 names: db0 db0: jdbc-url: jdbc:mysql://127.0.0.1:3306/shardingsphere-demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root # 规则配置 rules: sharding: # 分片算法配置 sharding-algorithms: table-inline: # 分片算法类型 https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/sharding/ type: INLINE props: # 分片算法的行表达式 algorithm-expression: t_order$->{order_id % 4} # 分布式序列算法配置 key-generators: snowflake: # 分布式序列算法(雪花算法:SNOWFLAKE;UUID:UUID)(注:UUID没有props配置) https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/keygen/ type: SNOWFLAKE # 分布式序列算法属性配置 props: # 工作机器唯一标识 worker-id: 1 tables: # 逻辑表名称 t_order: # 行表达式标识符可以使用 ${...} 或 $->{...},但前者与 Spring 本身的属性文件占位符冲突,因此在 Spring 环境中使用行表达式标识符建议使用 $->{...} actual-data-nodes: db0.t_order$->{0..3} # 分表策略 table-strategy: standard: # 分片列名称 sharding-column: order_id # 分片算法名称 sharding-algorithm-name: table-inline # 属性配置 props: # 展示修改以后的sql语句 sql-show: true

项目地址:https://gitee.com/lemonwjh/ShardingSphere-demo

demo已升级为“分库分表”,仅“分表”可参考本文的application.yml




来源:https://blog.csdn.net/qq_23354917/article/details


 THE END



推荐阅读  

阿里开源Arthas进阶之方法执行监控

SpringBoot整合阿里开源性能监控神器Arthas

阿里巴巴开源性能监控神器Arthas

Spring注入Bean的方式你知道几种?

阿里出品!SpringBoot应用自动化部署神器

RabbitMQ如何实现高可用?

点赞+在看,关注公众号回复“666”领取福利


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存