当前位置:网站首页>ShardingSphere之未分片表配置实战(六)
ShardingSphere之未分片表配置实战(六)
2022-07-31 00:40:00 【融极】
概述
场景
在实际工作中,有些表需要参与分片操作,有些表则无需分片,那么这种场景下,sharding-jdbc该如何配置呢?
SpringBoot环境搭建
application.properties配置
涉及未分配表的配置如下,只需要指定default-data-source-name即可。
# 默认数据库,不分片的表都在这里
spring.shardingsphere.datasource.mx.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.mx.driver-class-name=com.mysql.cj.jdbc.Driver
# course_db数据库无需单独建立,也可以是和其他的分片数据库相同,比如可以是edu_db_1
spring.shardingsphere.datasource.mx.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.mx.username=root
spring.shardingsphere.datasource.mx.password=123456
# 默认数据源,未分片的表默认执行库
spring.shardingsphere.sharding.default-data-source-name=mx
全量配置如下
# 配置分片策略
# 配置数据源
spring.shardingsphere.datasource.names=m0,m1,m2,mx
# 默认数据库,不分片的表都在这里
spring.shardingsphere.datasource.mx.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.mx.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.mx.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.mx.username=root
spring.shardingsphere.datasource.mx.password=123456
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/edu_db_1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=123456
spring.shardingsphere.datasource.m0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m0.url=jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m0.username=root
spring.shardingsphere.datasource.m0.password=123456
# 默认数据源,未分片的表默认执行库
spring.shardingsphere.sharding.default-data-source-name=mx
# 指定course表分布情况,配置表在哪个数据库中,表名称都是什么
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->{1..2}.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}
# 指定库的中course表的分片策略
spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->{user_id % 2 + 1}
# 指定t_user表分布情况,配置表在哪个数据库中,表名称都是什么
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m0.t_user
# 指定t_user主键user_id生成策略SNOWFLAKE
spring.shardingsphere.sharding.tables.t_user.key-generator.column=user_id
spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE
# 指定表分片策略
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user
# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
# 解决一个Course实体类不能对应两张表的问题
spring.main.allow-bean-definition-overriding=true
表结构

CREATE TABLE `t_study` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`course_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
测试代码
package com.study.shardingjdbcdemo.entity;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "t_study")
public class Study {
@Id
private Long id;
private String name;
private String courseName;
}
package com.study.shardingjdbcdemo.mapper;
import com.study.shardingjdbcdemo.entity.Study;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface StudyMapper extends Mapper<Study> {
}
@Test
public void defaultDb() {
Study study = new Study();
study.setName("xm");
study.setCourseName("mysql");
studyMapper.insert(study);
}
参考
边栏推荐
- 从笔试包装类型的11个常见判断是否相等的例子理解:包装类型、自动装箱与拆箱的原理、装箱拆箱的发生时机、包装类型的常量池技术
- Jetpack Compose学习(8)——State及remeber
- Bypass of xss
- ELK deployment script---pro test available
- Preparations for web vulnerabilities
- Kotlin协程:协程上下文与上下文元素
- DNS resolution process [visit website]
- software development design process
- Consistency and Consensus of Distributed Systems (1) - Overview
- Method for deduplication of object collection
猜你喜欢

【ABAP】MFBF过账到质量检验库存类型Demo

Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv

Jmeter parameter transfer method (token transfer, interface association, etc.)

MySQL数据库面试题总结(2022最新版)

Niuke.com question brushing training (4)

MySQL triggers

How to install joiplay emulator rtp

unity2D横版游戏教程4-物品收集以及物理材质

【唐宇迪 深度学习-3D点云实战系列】学习笔记

asser利用蚁剑登录
随机推荐
Detailed explanation of 9 common reasons for MySQL index failure
[Yugong Series] July 2022 Go Teaching Course 015-Assignment Operators and Relational Operators of Operators
web漏洞之需要准备的工作
Strict Mode for Databases
分布式系统的一致性与共识(1)-综述
SWM32系列教程6-Systick和PWM
What is Promise?What is the principle of Promise?How to use Promises?
[Tang Yudi Deep Learning-3D Point Cloud Combat Series] Study Notes
Go 学习笔记(84)— Go 项目目录结构
会议OA项目待开会议、所有会议功能
firewalld
PHP图片添加文字水印
ELK deployment script---pro test available
MySQL数据库进阶篇
DOM系列之动画函数封装
Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
Encapsulate and obtain system user information, roles and permission control
SereTOD2022 Track2 Code Analysis - Task-based Dialogue Systems Challenge for Semi-Supervised and Reinforcement Learning
binglog log tracking: data backup and backup tracking
Add text watermark to PHP image