🧑💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:MySQL实战

链接>>>>>>>>>《Redis从头学》链接>>>>>>>《图解RabbitMQ》本文主要演示使用SpringBoot结合ShardingSphere-JDBC快速实现MySQL的水平分库分表实战,含有详细的步骤说明。
ShardingSphere官网:https://shardingsphere.apache.org/
ShardingSphere-JDBC是一个轻量级的Java框架,为ShardingSphere的其中一个组件。在使用时只需在应用程序中引入其jar包即可,可以理解为增强版的JDBC驱动。
数据源名称.数据表名称,ds0.product。入门实战将从以下几点展开:
<dependency>
<groupId>org.apache.shardingspheregroupId>
<artifactId>sharding-jdbc-spring-boot-starterartifactId>
<version>4.1.1version>
dependency>
配置流程:
实体类小节代码配置文件中的分片策略采用行表达式法,使用groovy语言。
ds$->{0…1}=ds0/ds1;
#配置数据源名称
spring.shardingsphere.datasource.names=ds0,ds1
#详细配置每个数据源
# 第一个数据库
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root
# 第二个数据库
spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3306/shop_order_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root
#配置workid
spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1
#id生成策略
spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE
#配置product_order数据节点ds$->{0..1}.product_order_$->{0..1}
spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds$->{0..1}.product_order_$->{0..1}
#配置product_order_item数据节点
spring.shardingsphere.sharding.tables.product_order_item.actual-data-nodes=ds$->{0..1}.product_order_item_$->{0..1}
#Product_order配置分库规则
spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
#配置默认分库策略
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
#某个表Product_order指定分片策略-->分片键+分片算法
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id % 2}
#某个表Product_order_item指定分片策略-->分片键+分片算法
spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.sharding-column=product_order_id
spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.algorithm-expression=product_order_$->{product_order_id % 2}
#配置广播表,多个采用,分割
spring.shardingsphere.sharding.broadcast-tables=ad_config
spring.shardingsphere.sharding.tables.ad_config.key-generator.column=id
spring.shardingsphere.sharding.tables.ad_config.key-generator.type=SNOWFLAKE
#配置绑定表
spring.shardingsphere.sharding.binding-tables=product_order,product_order_item
以下实体类中的@Table注解的值为逻辑表的名称。
@Data
@TableName("product_order")
@EqualsAndHashCode(callSuper = false)
public class ProductOrderDO {
private Long id;
private String outTradeNo;
private String state;
private Date createTime;
private Double payAmount;
private String nickname;
private Long userId;
}
@Data
@TableName("product_order_item")
public class ProductOrderItemDO {
private Long id;
//分表
private Long productOrderId;
private Long productId;
private String productName;
private Integer buyNum;
//分库
private Long userId;
}
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("ad_config")
public class AdConfigDO {
private Long id;
private String configKey;
private String configValue;
private String type;
}
有关于ShardingSphere-JDBC分库分表快速入门实战到此结束了。文中有错误之处或者大家有什么疑问,欢迎在评论区留言。最后感谢大家的阅读
