SpringCloud实现分库分表模式下,数据库实时扩容方
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,一、项目结构1、工程结构2、模块命名shard-common-entity: 公共代码块shard-open-inte: 开放接口管理shard-eureka-7001:
千家信息网最后更新 2025年01月19日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 ListtableOneList = 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安全错误
数据库的锁怎样保障安全
ftp服务器的攻击与防护
股票软件开发定制
现在手机软件开发用什么
qt开发服务器
如何做网络安全专家
怎么配置dns本地服务器
java 数据库面试
计算机网络安全导论题目
码链上海网络技术有限公司
安卓软件开发需要什么技术
开封电信代理服务器
邮箱登录显示请检查服务器信息
香港服务器 阿里云
网络安全管理和处置措施ppt
数据库表的数据覆盖另一表
丽水今橙网络技术
网络安全公司好的有哪些
古冶区软件开发品质保障
佳杰服务器
苏州app软件开发报价
网吧服务器管理方
BMS软件开发需要哪些知识
ps4如何看注册服务器
数据库01445
天河区无源网络技术开发价格多少
网络安全显示图
软件开发常用词汇道客巴巴
网络安全与信息安全寄语
学校冬奥会网络安全保障工作总结
扫描识别文字软件开发