SpringCloud实现分库分表模式下,数据库实时扩容方
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、项目结构1、工程结构2、模块命名shard-common-entity: 公共代码块shard-open-inte: 开放接口管理shard-eureka-7001:
千家信息网最后更新 2026年10月31日SpringCloud实现分库分表模式下,数据库实时扩容方
一、项目结构
1、工程结构

2、模块命名
shard-common-entity: 公共代码块shard-open-inte: 开放接口管理shard-eureka-7001: 注册中心shard-two-provider-8001: 8001 基于两台库的服务shard-three-provider-8002:8002 基于三台库的服务
3、代码依赖结构
4、项目启动顺序
(1)shard-eureka-7001: 注册中心(2)shard-two-provider-8001: 8001 基于两台库的服务(3)shard-three-provider-8002:8002 基于三台库的服务
按照顺序启动,且等一个服务完全启动后,在启动下一个服务,不然可能遇到一些坑。
二、核心代码块
1、8001 服务提供一个对外服务
基于Feign的调用方式 作用:基于两台分库分表的数据查询接口。郑州治疗不孕不育哪里好:http://www.zzfkyy120.com/
import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import shard.jdbc.common.entity.TableOne;/** * shard-two-provider-8001 * 对外开放接口 */@FeignClient(value = "shard-provider-8001")public interface TwoOpenService { @RequestMapping("/selectOneByPhone/{phone}") TableOne selectOneByPhone(@PathVariable("phone") String phone) ;}2、8002 服务提供一个对外服务
基于Feign的调用方式 作用:基于三台分库分表的数据存储接口。
import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import shard.jdbc.common.entity.TableOne;/** * 数据迁移服务接口 */@FeignClient(value = "shard-provider-8002")public interface MoveDataService { @RequestMapping("/moveData") Integer moveData (@RequestBody TableOne tableOne) ;}3、基于8002服务数据查询接口
查询流程图
代码块
/** * 8001 端口 :基于两台分库分表策略的数据查询接口 */@Resourceprivate TwoOpenService twoOpenService ;@Overridepublic TableOne selectOneByPhone(String phone) { TableOne tableOne = tableOneMapper.selectOneByPhone(phone); if (tableOne != null){ LOG.info("8002 === >> tableOne :"+tableOne); } // 8002 服务没有查到数据 if (tableOne == null){ // 调用 8001 开放的查询接口 tableOne = twoOpenService.selectOneByPhone(phone) ; LOG.info("8001 === >> tableOne :"+tableOne); } return tableOne ;}4、基于 8001 数据扫描迁移代码
迁移流程图
代码块
郑州不孕不育检查:http://wapyyk.39.net/zz3/zonghe/1d427.html
/** * 8002 端口开放的数据入库接口 */@Resourceprivate MoveDataService moveDataService ;/** * 扫描,并迁移数据 * 以 库 db_2 的 table_one_1 表为例 */@Overridepublic void scanDataRun() { String sql = "SELECT id,phone,back_one backOne,back_two backTwo,back_three backThree FROM table_one_1" ; // dataTwoTemplate 对应的数据库:ds_2 List tableOneList = dataTwoTemplate.query(sql,new Object[]{},new BeanPropertyRowMapper<>(TableOne.class)) ; if (tableOneList != null && tableOneList.size()>0){ int i = 0 ; for (TableOne tableOne : tableOneList) { String db_num = HashUtil.moveDb(tableOne.getPhone()) ; String tb_num = HashUtil.moveTable(tableOne.getPhone()) ; // 只演示向数据新加库 ds_4 迁移的数据 if (db_num.equals("ds_4")){ i += 1 ; LOG.info("迁移总数数=>" + i + "=>库位置=>"+db_num+"=>表位置=>"+tb_num+"=>数据:【"+tableOne+"】"); // 扫描完成:执行新库迁移和旧库清理过程 moveDataService.moveData(tableOne) ; // dataTwoTemplate.update("DELETE FROM table_one_1 WHERE id=? AND phone=?",tableOne.getId(),tableOne.getPhone()); } } }} 三、演示执行流程
https://www.jianshu.com/p/fc56f6221728
1、项目流程图
2、测试执行流程
(1)、访问8002 数据查询端口
http://127.0.0.1:8002/selectOneByPhone/phone20日志输出:8001 服务查询到数据8001 === >> tableOne :+{tableOne}(2)、执行8001 数据扫描迁移
http://127.0.0.1:8001/scanData
(3)、再次访问8002 数据查询端口
http://127.0.0.1:8002/selectOneByPhone/phone20日志输出:8002 服务查询到数据8002 === >> tableOne :+{tableOne}
数据
服务
接口
查询
代码
数据查询
流程
端口
开放
分库
分表
流程图
结构
项目
三台
对外
不孕不育
位置
作用
对外服务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技股互联网
互联网与科技发展
互联网与未来科技
深圳齐家互联网科技
亿账通互联网科技
互联网科技美容
互联网科技咨询
左右互联网络科技
华中科技有哪些互联网大佬
老年人脱离互联网科技的作文
武汉健翔互联网络科技有限公司
荆州市昕露互联网络科技有限公司
华夏恒生互联网科技013171
广州新华互联网科技学校电竞方面
每天都有哪些好的互联网科技
南通创西澳互联网科技有限公司
雨阳互联网卡科技有限公司
深圳无忧互联网科技
张召忠谈中国互联网科技
互联网科技创新创业项目
麻工互联网科技
人人互联网科技是培训
互联网科技寓意
注册互联网科技公司经营范围大全
苏州铭阳互联网科技有限公司
速维有品互联网信息科技(苏州)有限公司
卡尔迅互联网科技有限公司
互联网科技新闻
长沙渺峰互联网科技有限公司
第三届互联网大会安防黑科技