当前位置:网站首页>五分钟带你上手ShardingJDBC实现MySQL分库分表
五分钟带你上手ShardingJDBC实现MySQL分库分表
2022-08-01 14:52:00 【InfoQ】
Mysql环境
项目配置
依赖引入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置文件配置
# 配置真实数据源,ds{0..2}
spring.shardingsphere.datasource.names=ds0,ds1,ds2
# 配置第 1 个数据源
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://192.168.31.241:3306/testdb
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root
# 配置第 2 个数据源
spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://192.168.31.242:3306/testdb
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root
# 配置第 3 个数据源
spring.shardingsphere.datasource.ds2.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds2.jdbc-url=jdbc:mysql://192.168.31.243:3306/testdb
spring.shardingsphere.datasource.ds2.username=root
spring.shardingsphere.datasource.ds2.password=root
# 标准分片表配置ds->{0..2}的含义是
# 针对employee表新增数据时,有三个数据源ds0、ds1、ds2中都有employee表
# spring.shardingsphere.rules.sharding.tables.employee.actual-data-nodes=ds$->{0..2}.employee
# 定义数据源的分片规则,按employee表的id % 3 取模得到数据应放在哪个数据源
spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.props.algorithm-expression=ds$->{id % 3}
# 定义哪一个列用于生成主键 employee对应的是相应的表名
spring.shardingsphere.rules.sharding.tables.employee.key-generate-strategy.column=id
# 定义employee表哪个是分片字段,这里按主键字段id,这个表示基于哪一个列进行分片
spring.shardingsphere.rules.sharding.tables.employee.database-strategy.standard.sharding-column=id
# 将employee表与分片规则database-inline绑定
spring.shardingsphere.rules.sharding.tables.employee.database-strategy.standard.sharding-algorithm-name=database-inline
# 默认主键生成策略采用snowflake
spring.shardingsphere.sharding.default-key-generate-strategy.xxx=snowflake
#SNOWFLAKE算法配置
spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE
#机器唯一标识
spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=666
#显示分库分表后执行的SQL语句
spring.shardingsphere.props.sql-show=true
测试使用
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itlaoqi.shardingjdbc.entity.Employee;
public interface EmployeeMapper extends BaseMapper<Employee> {
}
mport com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("employee")
public class Employee {
@TableId
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.itlaoqi.shardingjdbc.entity.Employee;
import com.itlaoqi.shardingjdbc.mapper.EmployeeMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
public class EmployeeTestor {
@Resource
private EmployeeMapper employeeMapper;
@Test
public void testInsert(){
for(int i = 0 ; i < 10 ; i++) {
Employee employee = new Employee();
employee.setName("MJ" + i);
employeeMapper.insert(employee);
}
}
@Test
public void testSelect(){
List<Employee> employees = employeeMapper.selectList(new QueryWrapper<>());
}
}
边栏推荐
猜你喜欢
![[Binary Tree] Path Sum II](/img/ed/741b213f620f19975bdb479de015b1.png)
[Binary Tree] Path Sum II

Next-ViT学习笔记

灵魂发问:MySQL是如何解决幻读的?

沃文特生物IPO过会:年营收4.8亿 养老基金是股东

SQL查询语句之查询数据

0-1背包问题的一维数组优化解析

Timezone setting in MySQL

布隆过滤器bloom

Koreographer Professional Edition丨一款Unity音游插件教程

Amperon IPO meeting: annual revenue of 500 million Tongchuang Weiye and China Mobile Innovation are shareholders
随机推荐
The soul asks: How does MySQL solve phantom reads?
HTB-Shocker
信息录入率百分百上海强化施工现场建筑工人实名制管理
动态模型中嵌入静态模型实践
输出0-1背包问题的具体方案 ← 利用二维数组
Arduino无线下载 Arduino USB接口无线自动下载程序
HDU 2602: Bone Collector ← 0-1背包问题
[Binary Tree] Path Sum II
170页6万字智慧能源管理平台建设方案书
Inflation continues, Kenya's food security a concern
0-1背包问题的一维数组优化解析
SyntaxHighlighter带来的字符转义问题
Digicert EV证书签名后出现“证书对于请求用法无效”的解决方案
十九届浙大城院程序设计竞赛 F.Sum of Numerators(数学/找规律)
Grid布局 容器属性(一) `grid-template`系列属性
Performance Optimization - Rendering Optimization Notes
RepOptimizer学习笔记
stm32l476芯片介绍(nvidia驱动无法找到兼容的图形硬件)
我寻找的方向
leetcode:80. 删除有序数组中的重复项 II