目录

  • 前言
  • 创建数据库表
  • 编写程序
    • 引入 `maven` 依赖
    • 实体类
    • `Service` 层
    • `Controller` 层
    • `application.properties` 文件
  • 接口测试

前言

在 上一篇文章 中实现了水平分库分表,它可以应对数据量及访问压力比较大的情况,以及数据量极大,且持续增长的情况。但是在一个分库分表的数据库系统中,很多时候需要有一些公共资源表,对于这些公共资源表该怎么操作其数据呢? 本文就是要解决这个问题

创建数据库表

分别在数据库 order_db_1order_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_1order_db_2 两个数据库中的表 t_order_dict 都有新增的数据,也就是说这个公共表里面的数据是同步的,是有完全相同的数据的

SpringBoot整合Sharding-JDBC实现水平分库分表之操作公共表相关推荐

  1. springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)

    springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码) 一.整合sharding-jdbc 关于springboot整合sharding ...

  2. 你分库分表的姿势对么?——详谈水平分库分表

    作者:vivo平台产品开发团队-Han Lei 一.背景 提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词.随着业务的发展,我们表中的数据量会变的越来越大,字段也可能随着业务复杂度的升 ...

  3. 水平分库分表的关键问题及解决思路(转)

    水平分库分表的关键问题及解决思路 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和 ...

  4. 水平分库分表的关键步骤以及可能遇到的问题

    http://www.infoq.com/cn/articles/key-steps-and-likely-problems-of-horizontal-split-table 分片技术的由来 关系型 ...

  5. Oracle之垂直水平分库分表(一)

    现在开始讲另外一个知识点吧,这个知识点也是怎么说呢,就是非常有用的知识点,刚才看了一下表空间 现在咱们说一下ORACLE里面的表类型,表类型其实有这么多种表1. 正常我们的heap table,堆表, ...

  6. mysql sharding 知乎_分库分表系列(1)-shardingsphere核心概念

    欢迎关注公众号: 戏说码农职场 咱们不闲扯, 就直接入正题, 这次总结说下sharding-jdbc 分库分表的工具.整体架构 Apache ShardingSphere 是一套开源的分布式数据库中间 ...

  7. 数据库水平分库分表后的数据分页查询解决方案

    2021-09-04 更: 推荐下自己的个人框架,后面代码都会移植到框架中 链接 2020-10-19 更: 月底不出意外,打算重构了,fabric区块链框架改的差不多了 2020-10-? 更: 谢 ...

  8. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪

    本文目录: 1.自定义JDBC框架 --数据库元数据:DataBaseMetaData 2.自定义JDBC框架 --数据库元数据:DataBaseMetaData 3.自定义JDBC框架 --结果集元 ...

  9. 水平分库分表的关键步骤和技术难点,分库分表的几种常见玩法及如何解决跨库查询等问题...

    http://blog.csdn.net/dinglang_2009/article/details/53195871 http://blog.csdn.net/dinglang_2009/artic ...

  10. Oracle之垂直水平分库分表(二)

    对于拆分的解决方案这块,上节课我们讲到了如何去拆分,然后拆分有些问题,引入了一系列的问题,比如说分布式事务的问题,关于分布式事务这个事啊,其实挺不好解决的,就是根据情况吧,咱们在这里说三个方案,你针对 ...

最新文章

  1. Java的三大特性之继承
  2. Flink1.4.0连接Kafka0.10.2时遇到的问题
  3. 云原生 Serverless Database 使用体验
  4. 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数
  5. 多项式求逆模板(NTT + mod)
  6. 使用Quick BI连接AnalyticDB for PostgreSQL数据源
  7. C++ 虚函数重载多态
  8. 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
  9. java学习日记(1-7)
  10. 梨花带雨音乐播放器3.91源码开源(网站添加背景音乐)
  11. Java之实现简单中文笔画验证码
  12. 量子计算机模拟黑洞纠缠,科学家想用量子纠缠探查黑洞内部?那得先找到自旋方向相反的光子...
  13. 【CodeForces 1253B --- Silly Mistake】
  14. Hadoop上路-03_Hadoop JavaAPI
  15. C#设计模式——访问者模式(Vistor Pattern)
  16. 攻防世界-re-for-50-plz-50
  17. 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?
  18. SDN:简述对SDN架构的认识
  19. raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not sup
  20. linux常见 操作及英文

热门文章

  1. C/C++[codeup 2026]日期类
  2. 易筋SpringBoot 2.1 | 第廿五篇:SpringBoot之Jedis访问Redis
  3. NumPy库---一元函数
  4. 242. Valid Anagram [easy] (Python)
  5. iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
  6. 超标量体系结构_计算机体系结构——以多发射和静态调度来开发ILP
  7. 【从线性回归到BP神经网络】第一部分:协方差与相关系数
  8. 【生信进阶练习1000days】day11day12-GEO data mining
  9. 【2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) A】The game of Osho【SG函数+找规律】
  10. 第二次作业:分布式版本控制系统Git的安装与使用