🚀 feat(新增): 配置出错
This commit is contained in:
parent
7986daec9c
commit
32bd6284d5
|
@ -30,7 +30,7 @@ public class Order implements Serializable {
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@TableId(value = "id", type = IdType.ASSIGN_ID)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
private String orderNo;
|
private String orderNo;
|
||||||
|
|
|
@ -10,7 +10,7 @@ spring:
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
|
||||||
# url: jdbc:shardingsphere:classpath:sharding/sharding-default.yaml
|
# url: jdbc:shardingsphere:classpath:sharding/sharding-default.yaml
|
||||||
url: jdbc:shardingsphere:classpath:sharding/sharding-sharding.yaml
|
url: jdbc:shardingsphere:classpath:sharding/sharding-standard.yaml
|
||||||
|
|
||||||
jackson:
|
jackson:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
# 水平分片不要创建主键自增
|
||||||
|
mode:
|
||||||
|
type: Standalone
|
||||||
|
repository:
|
||||||
|
type: JDBC
|
||||||
|
dataSources:
|
||||||
|
server_user:
|
||||||
|
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
|
||||||
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
|
jdbcUrl: jdbc:mysql://192.168.3.21:3304/db_user?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
||||||
|
username: root
|
||||||
|
password: "02120212"
|
||||||
|
server_order0:
|
||||||
|
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
|
||||||
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
|
jdbcUrl: jdbc:mysql://192.168.3.21:3300/db_order?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
||||||
|
username: root
|
||||||
|
password: "02120212"
|
||||||
|
server_order1:
|
||||||
|
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
|
||||||
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
|
jdbcUrl: jdbc:mysql://192.168.3.21:3301/db_order?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
||||||
|
username: root
|
||||||
|
password: "02120212"
|
||||||
|
|
||||||
|
rules:
|
||||||
|
# 数据分片配置
|
||||||
|
- !SHARDING
|
||||||
|
# 路由表 当表位 t_user 路由到 dataSources为server_user下的t_user
|
||||||
|
tables:
|
||||||
|
t_user:
|
||||||
|
actualDataNodes: server_user.t_user
|
||||||
|
t_order:
|
||||||
|
actualDataNodes: server_order${0..1}.t_order{0..1}
|
||||||
|
# 指定分片策略--数据库
|
||||||
|
databaseStrategy:
|
||||||
|
standard:
|
||||||
|
# 指定分片列字段
|
||||||
|
shardingColumn: user_id
|
||||||
|
# 指定分片算法名称
|
||||||
|
shardingAlgorithmName: server_order_ds_user_id # server_order_user_id
|
||||||
|
# 指定分片策略--表
|
||||||
|
tableStrategy:
|
||||||
|
standard:
|
||||||
|
# 指定分片列字段
|
||||||
|
shardingColumn: order_no
|
||||||
|
# 指定分片算法名称
|
||||||
|
shardingAlgorithmName: alg_hash_mod # server_order_user_id
|
||||||
|
|
||||||
|
# 分片算法
|
||||||
|
shardingAlgorithms:
|
||||||
|
server_order_ds_user_id:
|
||||||
|
type: INLINE
|
||||||
|
props:
|
||||||
|
algorithm-expression: server_order${user_id % 2} # 分片规则表达式,偶数位存储到 server_order0 奇数位存储到 server_order1
|
||||||
|
alg_hash_mod:
|
||||||
|
type: HASH_MOD
|
||||||
|
props:
|
||||||
|
sharding-count: 2
|
||||||
|
|
||||||
|
|
||||||
|
# 打印SQL
|
||||||
|
props:
|
||||||
|
sql-show: true
|
||||||
|
|
||||||
|
# 行表达式 参考:https://shardingsphere.apache.org/document/5.1.1/cn/features/sharding/concept/inline-expression/
|
||||||
|
# order${0..1}.order${0..1} 表示 order0.order0, order0.order1, order1.order0, order1.order1
|
||||||
|
# ${['one', 'two']}_ds${1..3} 表示 one_ds1, one_ds2, one_ds2, one_ds3, two_ds1, two_ds2, two_ds3 等于笛卡尔积
|
|
@ -0,0 +1,76 @@
|
||||||
|
package cn.bunny.service.service.impl;
|
||||||
|
|
||||||
|
import cn.bunny.entity.order.Order;
|
||||||
|
import cn.bunny.service.mapper.OrderMapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.util.DigestUtils;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
public class OrderServiceShardingTest {
|
||||||
|
@Autowired
|
||||||
|
private OrderMapper orderMapper;
|
||||||
|
|
||||||
|
// 水平分片测试
|
||||||
|
@Test
|
||||||
|
void testShardingOrder() {
|
||||||
|
double random = Math.random();
|
||||||
|
String md5DigestAsHex = DigestUtils.md5DigestAsHex(String.valueOf(random).getBytes());
|
||||||
|
|
||||||
|
Order order = new Order();
|
||||||
|
order.setOrderNo(md5DigestAsHex.substring(0, 6));
|
||||||
|
order.setUserId(1L);
|
||||||
|
order.setAmount(new BigDecimal(100));
|
||||||
|
|
||||||
|
orderMapper.insert(order);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分库测试
|
||||||
|
@Test
|
||||||
|
void testInsertOrderStrategy() {
|
||||||
|
for (long i = 0; i < 4; i++) {
|
||||||
|
double random = Math.random();
|
||||||
|
String md5DigestAsHex = DigestUtils.md5DigestAsHex(String.valueOf(random).getBytes());
|
||||||
|
|
||||||
|
Order order = new Order();
|
||||||
|
order.setOrderNo(md5DigestAsHex.substring(0, 6));
|
||||||
|
order.setUserId(i);
|
||||||
|
order.setAmount(new BigDecimal(100));
|
||||||
|
|
||||||
|
orderMapper.insert(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 分库测试
|
||||||
|
@Test
|
||||||
|
void testInsertOrderStrategy2() {
|
||||||
|
for (long i = 4; i < 8; i++) {
|
||||||
|
double random = Math.random();
|
||||||
|
String md5DigestAsHex = DigestUtils.md5DigestAsHex(String.valueOf(random).getBytes());
|
||||||
|
|
||||||
|
Order order = new Order();
|
||||||
|
order.setOrderNo(md5DigestAsHex.substring(0, 6));
|
||||||
|
order.setUserId(i);
|
||||||
|
order.setAmount(new BigDecimal(100));
|
||||||
|
|
||||||
|
orderMapper.insert(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分库分别测试
|
||||||
|
@Test
|
||||||
|
void testInsertOrderStrategy3() {
|
||||||
|
for (long i = 5; i < 9; i++) {
|
||||||
|
|
||||||
|
Order order = new Order();
|
||||||
|
order.setOrderNo("ATGUIGU" + i);
|
||||||
|
order.setUserId(2L);
|
||||||
|
order.setAmount(new BigDecimal(100));
|
||||||
|
orderMapper.insert(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,12 +13,13 @@ import java.math.BigDecimal;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
public class OrderServiceTest {
|
public class OrderServiceVerticalTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderMapper orderMapper;
|
private OrderMapper orderMapper;
|
||||||
|
|
||||||
|
// 垂直分片测试
|
||||||
@Test
|
@Test
|
||||||
void insertOrder() throws NoSuchAlgorithmException {
|
void insertOrder() throws NoSuchAlgorithmException {
|
||||||
double num = Math.random();
|
double num = Math.random();
|
Loading…
Reference in New Issue