真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

創(chuàng)新互聯(lián)建站是一家專業(yè)提供鞍山企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為鞍山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一、項(xiàng)目結(jié)構(gòu)

1、工程結(jié)構(gòu)

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

2、模塊命名

shard-common-entity:   公共代碼塊
shard-open-inte:        開放接口管理
shard-eureka-7001:      注冊中心
shard-two-provider-8001: 8001 基于兩臺庫的服務(wù)
shard-three-provider-8002:8002 基于三臺庫的服務(wù)

3、代碼依賴結(jié)構(gòu)

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

4、項(xiàng)目啟動(dòng)順序

(1)shard-eureka-7001:        注冊中心
(2)shard-two-provider-8001:  8001 基于兩臺庫的服務(wù)
(3)shard-three-provider-8002:8002 基于三臺庫的服務(wù)

按照順序啟動(dòng),且等一個(gè)服務(wù)完全啟動(dòng)后,在啟動(dòng)下一個(gè)服務(wù),不然可能遇到一些坑。

二、核心代碼塊

1、8001 服務(wù)提供一個(gè)對外服務(wù)

基于Feign的調(diào)用方式
作用:基于兩臺分庫分表的數(shù)據(jù)查詢接口。

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 服務(wù)提供一個(gè)對外服務(wù)

基于Feign的調(diào)用方式
作用:基于三臺分庫分表的數(shù)據(jù)存儲接口。

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;

/**
 * 數(shù)據(jù)遷移服務(wù)接口
 */
@FeignClient(value = "shard-provider-8002")
public interface MoveDataService {
    @RequestMapping("/moveData")
    Integer moveData (@RequestBody TableOne tableOne) ;
}

3、基于8002服務(wù)數(shù)據(jù)查詢接口

查詢流程圖

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

代碼塊

/**
 * 8001 端口 :基于兩臺分庫分表策略的數(shù)據(jù)查詢接口
 */
@Resource
private TwoOpenService twoOpenService ;
@Override
public TableOne selectOneByPhone(String phone) {
    TableOne tableOne = tableOneMapper.selectOneByPhone(phone);
    if (tableOne != null){
        LOG.info("8002 === >> tableOne :"+tableOne);
    }
    // 8002 服務(wù)沒有查到數(shù)據(jù)
    if (tableOne == null){
        // 調(diào)用 8001 開放的查詢接口
        tableOne = twoOpenService.selectOneByPhone(phone) ;
        LOG.info("8001 === >> tableOne :"+tableOne);
    }
    return tableOne ;
}

4、基于 8001 數(shù)據(jù)掃描遷移代碼

遷移流程圖

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

代碼塊

/**
 * 8002 端口開放的數(shù)據(jù)入庫接口
 */
@Resource
private MoveDataService moveDataService ;
/**
 * 掃描,并遷移數(shù)據(jù)
 * 以 庫 db_2 的 table_one_1 表為例
 */
@Override
public void scanDataRun() {
    String sql = "SELECT id,phone,back_one backOne,back_two backTwo,back_three backThree FROM table_one_1" ;
    // dataTwoTemplate 對應(yīng)的數(shù)據(jù)庫: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()) ;
            // 只演示向數(shù)據(jù)新加庫 ds_4 遷移的數(shù)據(jù)
            if (db_num.equals("ds_4")){
                i += 1 ;
                LOG.info("遷移總數(shù)數(shù)=>" + i + "=>庫位置=>"+db_num+"=>表位置=>"+tb_num+"=>數(shù)據(jù):【"+tableOne+"】");
                // 掃描完成:執(zhí)行新庫遷移和舊庫清理過程
                moveDataService.moveData(tableOne) ;
                // dataTwoTemplate.update("DELETE FROM table_one_1 WHERE id=? AND phone=?",tableOne.getId(),tableOne.getPhone());
            }
        }
    }
}

三、演示執(zhí)行流程

1、項(xiàng)目流程圖

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案

2、測試執(zhí)行流程

(1)、訪問8002 數(shù)據(jù)查詢端口

http://127.0.0.1:8002/selectOneByPhone/phone20
日志輸出:
8001 服務(wù)查詢到數(shù)據(jù)
8001 === >> tableOne :+{tableOne}

(2)、執(zhí)行8001 數(shù)據(jù)掃描遷移

http://127.0.0.1:8001/scanData

(3)、再次訪問8002 數(shù)據(jù)查詢端口

http://127.0.0.1:8002/selectOneByPhone/phone20
日志輸出:
8002 服務(wù)查詢到數(shù)據(jù)
8002 === >> tableOne :+{tableOne}

四、源代碼地址

GitHub·地址
https://github.com/cicadasmile/spring-cloud-base
GitEE·地址
https://gitee.com/cicadasmile/spring-cloud-base

SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案


網(wǎng)站欄目:SpringCloud實(shí)現(xiàn)ShardJdbc分庫分表模式下,數(shù)據(jù)庫擴(kuò)容方案
文章地址:http://weahome.cn/article/gcpdhh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部