spring cloud微服務快速教程之(十二) 分布式ID解決方案(mybatis-plus篇)


0-前言

  分布式系統中,分布式ID是個必須解決的問題點;

  雪花算法是個好方式,不過不能直接使用,因為如果直接使用的話,需要配置每個實例workerId和datacenterId,在微服務中,實例一般動態配置,直接指定具體實例的這兩個參數是不現實的;

  所以,一般采用雪花算法的變種,主要是將這兩個參數由手動配置改為動態生成,美團leaf、百度uid-generator都屬於改良的變種算法,可以適當采用;

  不過這些算法都或多或少對其他存在一定依賴,不是非常方便,今天我們來說一種非常方便的分布式ID解決方案,那就是mybatis plus 內置的方式;

  項目中基本都會使用到MYSQL,ORM無疑mybatis plus是最好用的;所以這種分布式ID方式很多時候都能在項目中采用;它實際也是雪花算法的變種,它采用網卡序列號等來動態生成workerId和datacenterId,在分布式的系統中,是可以保證ID唯一性的;

1-實現

1-1、添加依賴

        <!-- 9、集成mybatis-plus  -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

1-2、添加配置

mybatis plus使用前面有介紹過,請參考:https://www.cnblogs.com/yanghj/p/12446686.html

1-3、使用

  兩種方式:

一種是數據庫自動生成並插入,這種方式在插入數據庫時,數據庫自動生成並插入,無需用戶手動填寫,這種方式我們實際很少使用,因為在插入后才能拿到該ID,但是很多時候,我們在插入前就需要用到該ID,用來做其他關聯業務處理,所以手動插入比較實用點;

一種是手動插入方式:ID用mybatis plus來生成,然后再塞入ID字段中;

    /**
     * 編號
     */
    @TableId(value = "id",type = IdType.INPUT) //2、該注解表示ID手動填入
    //@TableId(value = "id",type = IdType.ASSIGN_ID) //1、該注解表示ID自動生成並插入,無需用戶填寫
    private Long id;

手動插入時,寫個IDhelper生成ID,代碼如下:

package com.anson.utils;

import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;

import java.util.UUID;

/**
 * 描述: ID生成
 * 版權: Copyright (c) 2020
 * 公司: XXX
 * 作者: yanghj
 * 版本: 4.0
 * 創建日期: 2020/9/16 9:59
 */
public class IDhelper
{
    //用mybatis-plus生成Long ID
    public  static Long getNextId()
    {
        IdentifierGenerator identifierGenerator=new DefaultIdentifierGenerator();
        Number id=  identifierGenerator.nextId(new Object());
        Long nextid = Long.parseLong(id+"");
        return nextid;
    }

}

使用的時候:

Long id = IDhelper.getNextId();

 

2-總結

  使用到MySQL數據庫的系統,這種分布式ID解決方案無疑是目前最方便的方案,當然,也可以采用其他方案;自由選擇;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM