Sharding-JDBC 的水平分表

x33g5p2x  于2021-11-11 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(221)

一 文档参考

1 官网

ShardingSphere

2 位置

二 配置文件示例

# shardingjdbc 分片策略
# 配置数据源,给数据源起名称
spring.shardingsphere.datasource.names=m1

# 一个实体类对应两张表,覆盖
spring.main.allow-bean-definition-overriding=true

# 配置数据源具体内容,包含连接池,驱动,地址,用户名和密码
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=Mima123456

# 指定 course 表分布情况,配置表在哪个数据库里面,表名称都是什么  m1.course_1 , m1.course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$->{1..2}

# 指定 course 表里面主键 cid 生成策略 SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE

# 指定分片策略:约定 cid 值偶数添加到 course_1 表,如果 cid 是奇数添加到 course_2 表
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 2 + 1}

# 打开sql输出日志
spring.shardingsphere.props.sql.show=true

三 测试代码

//=======================测试水平分表===================
// 添加课程的方法
@Test
public void addCourse() {
    for (int i = 1; i <= 10; i++) {
        Course course = new Course();
        course.setCname("java" + i);
        course.setUserId(100L);
        course.setCstatus("Normal" + i);
        courseMapper.insert(course);
    }
}

// 查询课程的方法
@Test
public void findCourse() {
    QueryWrapper<Course> wrapper = new QueryWrapper<>();
    wrapper.eq("cid", 663767001864339457L);
    Course course = courseMapper.selectOne(wrapper);
    System.out.println(course);
}

四 测试

1 当添加课程时

 2 当查询课程时

2021-11-06 15:35:14.632  INFO 20096 --- [           main] ShardingSphere-SQL                       : Actual SQL: m1 ::: SELECT  cid,cname,user_id,cstatus  FROM course_2  
WHERE  cid = ? ::: [663767001864339457]
Course(cid=663767001864339457, cname=java3, userId=100, cstatus=Normal3)
2021-11-06 15:35:14.716  INFO 20096 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed

相关文章