SpringBoot整合Sharding-JDBC实现水平分库分表之操作公共表
目录
- 前言
- 创建数据库表
- 编写程序
- 引入 `maven` 依赖
- 实体类
- `Service` 层
- `Controller` 层
- `application.properties` 文件
- 接口测试
前言
在 上一篇文章 中实现了水平分库分表,它可以应对数据量及访问压力比较大的情况,以及数据量极大,且持续增长的情况。但是在一个分库分表的数据库系统中,很多时候需要有一些公共资源表,对于这些公共资源表该怎么操作其数据呢?
本文就是要解决这个问题
创建数据库表
分别在数据库 order_db_1
和 order_db_2
中创建 t_order_dict
表,脚本如下
CREATE TABLE `t_order_dict` (`id` int(11) NOT NULL COMMENT '主键ID',`dict_code` varchar(255) CHARACTER SET utf8mb4 NOT NULL COMMENT '字典编码',`dict_value` varchar(255) CHARACTER SET utf8mb4 NOT NULL COMMENT '字典值',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典表';
分库分表数据库如下图所示
编写程序
项目主体代码依然使用 上一篇文章 的,只是添加一些代码而已
引入 maven
依赖
主要依赖如下,其它依赖自行引入
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version>
</dependency>
实体类
添加一个实体类
@Data
public class Dict implements Serializable {@NotNull(message = "参数id不能为空")private Integer id;@NotBlank(message = "参数dictCode不能为空")private String dictCode;@NotBlank(message = "参数dictValue不能为空")private String dictValue;
}
Service
层
@Service
public class DictServiceImpl implements DictService {@Autowiredprivate DictMapper dictMapper;@Overridepublic int insertDict(Dict dict) {return dictMapper.insertSelective(dict);}
}
Controller
层
@Controller
@RequestMapping(path = "/dict")
public class DictController {@Autowiredprivate DictService dictService;@PostMapping(path = "/addDict")@ResponseBodypublic ResultMap addDict(@Valid Dict dict, @NotNull BindingResult bindingResult) {// 参数校验if (bindingResult.hasErrors()) {String message = bindingResult.getFieldError().getDefaultMessage();return new ResultMap().fail().message(message);}int i = dictService.insertDict(dict);if (i > 0) {return new ResultMap().success().message("成功");}return new ResultMap().fail().message("失败");}
}
application.properties
文件
server.port=8080# sharding-jdbc分片规则配置开始---------------------------------------------------------------
# 自定义数据源名称为 m1和m2
spring.shardingsphere.datasource.names=m1,m2spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://127.0.0.1:3306/order_db_1?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://127.0.0.1:3306/order_db_2?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=123456#配置公共表,广播表规则
spring.shardingsphere.sharding.broadcast-tables=t_order_dict
spring.shardingsphere.sharding.tables.sys_dict.key-generator.column=id
spring.shardingsphere.sharding.tables.sys_dict.key-generator.type=SNOWFLAKE# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
# sharding-jdbc分片规则配置结束---------------------------------------------------------------# 指定 mapper 文件路径
mybatis.mapper-locations=cldasspath:com/example/mapper/*.xml
mybatis.configuration.cache-enabled=true
# 开启驼峰命名
mybatis.configuration.map-underscore-to-camel-case=true
- 更多详细的配置文档说明:https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/configuration/config-spring-boot/
接口测试
启动项目,使用 postman
测试接口 http://localhost:8080/dict/addDict
,结果如下
再看看 order_db_1
数据库中的 t_order_dict
表数据,如下
再看看 order_db_2
数据库中的 t_order_dict
表数据,如下
order_db_1
和order_db_2
两个数据库中的表t_order_dict
都有新增的数据,也就是说这个公共表里面的数据是同步的,是有完全相同的数据的
SpringBoot整合Sharding-JDBC实现水平分库分表之操作公共表相关推荐
- springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)
springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码) 一.整合sharding-jdbc 关于springboot整合sharding ...
- 你分库分表的姿势对么?——详谈水平分库分表
作者:vivo平台产品开发团队-Han Lei 一.背景 提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词.随着业务的发展,我们表中的数据量会变的越来越大,字段也可能随着业务复杂度的升 ...
- 水平分库分表的关键问题及解决思路(转)
水平分库分表的关键问题及解决思路 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和 ...
- 水平分库分表的关键步骤以及可能遇到的问题
http://www.infoq.com/cn/articles/key-steps-and-likely-problems-of-horizontal-split-table 分片技术的由来 关系型 ...
- Oracle之垂直水平分库分表(一)
现在开始讲另外一个知识点吧,这个知识点也是怎么说呢,就是非常有用的知识点,刚才看了一下表空间 现在咱们说一下ORACLE里面的表类型,表类型其实有这么多种表1. 正常我们的heap table,堆表, ...
- mysql sharding 知乎_分库分表系列(1)-shardingsphere核心概念
欢迎关注公众号: 戏说码农职场 咱们不闲扯, 就直接入正题, 这次总结说下sharding-jdbc 分库分表的工具.整体架构 Apache ShardingSphere 是一套开源的分布式数据库中间 ...
- 数据库水平分库分表后的数据分页查询解决方案
2021-09-04 更: 推荐下自己的个人框架,后面代码都会移植到框架中 链接 2020-10-19 更: 月底不出意外,打算重构了,fabric区块链框架改的差不多了 2020-10-? 更: 谢 ...
- JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪
本文目录: 1.自定义JDBC框架 --数据库元数据:DataBaseMetaData 2.自定义JDBC框架 --数据库元数据:DataBaseMetaData 3.自定义JDBC框架 --结果集元 ...
- 水平分库分表的关键步骤和技术难点,分库分表的几种常见玩法及如何解决跨库查询等问题...
http://blog.csdn.net/dinglang_2009/article/details/53195871 http://blog.csdn.net/dinglang_2009/artic ...
- Oracle之垂直水平分库分表(二)
对于拆分的解决方案这块,上节课我们讲到了如何去拆分,然后拆分有些问题,引入了一系列的问题,比如说分布式事务的问题,关于分布式事务这个事啊,其实挺不好解决的,就是根据情况吧,咱们在这里说三个方案,你针对 ...
最新文章
- Java的三大特性之继承
- Flink1.4.0连接Kafka0.10.2时遇到的问题
- 云原生 Serverless Database 使用体验
- 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数
- 多项式求逆模板(NTT + mod)
- 使用Quick BI连接AnalyticDB for PostgreSQL数据源
- C++ 虚函数重载多态
- 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
- java学习日记(1-7)
- 梨花带雨音乐播放器3.91源码开源(网站添加背景音乐)
- Java之实现简单中文笔画验证码
- 量子计算机模拟黑洞纠缠,科学家想用量子纠缠探查黑洞内部?那得先找到自旋方向相反的光子...
- 【CodeForces 1253B --- Silly Mistake】
- Hadoop上路-03_Hadoop JavaAPI
- C#设计模式——访问者模式(Vistor Pattern)
- 攻防世界-re-for-50-plz-50
- 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?
- SDN:简述对SDN架构的认识
- raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not sup
- linux常见 操作及英文
热门文章
- C/C++[codeup 2026]日期类
- 易筋SpringBoot 2.1 | 第廿五篇:SpringBoot之Jedis访问Redis
- NumPy库---一元函数
- 242. Valid Anagram [easy] (Python)
- iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
- 超标量体系结构_计算机体系结构——以多发射和静态调度来开发ILP
- 【从线性回归到BP神经网络】第一部分:协方差与相关系数
- 【生信进阶练习1000days】day11day12-GEO data mining
- 【2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) A】The game of Osho【SG函数+找规律】
- 第二次作业:分布式版本控制系统Git的安装与使用