点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

作者 |  大叔杨

来源 |  urlify.cn/BfIn2m

前言

  分布式系统中,分布式ID是个必须解决的问题点;

  雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动态配置,直接指定具体实例的这两个参数是不现实的;

  所以,一般采用雪花算法的变种,主要是将这两个参数由手动配置改为动态生成,美团leaf、百度uid-generator都属于改良的变种算法,可以适当采用;

  不过这些算法都或多或少对其他存在一定依赖,不是非常方便,今天我们来说一种非常方便的分布式ID解决方案,那就是mybatis plus 内置的方式;

  项目中基本都会使用到MYSQL,ORM无疑mybatis plus是最好用的;所以这种分布式ID方式很多时候都能在项目中采用;它实际也是雪花算法的变种,它采用网卡序列号等来动态生成workerId和datacenterId,在分布式的系统中,是可以保证ID唯一性的;

实现

1-1、添加依赖

        com.baomidoumybatis-plus-boot-starter3.2.0

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();

总结

  使用到MySQL数据库的系统,这种分布式ID解决方案无疑是目前最方便的方案,当然,也可以采用其他方案;自由选择;

粉丝福利:108本java从入门到大神精选电子书领取

mybatis plus 插入生成id_springcloud微服务快速教程之分布式ID解决方案(mybatisplus篇)...相关推荐

  1. GTS来了!阿里微服务架构下的分布式事务解决方案

    阿里妹导读:分布式事务已经成为微服务落地最大的阻碍,也是非常具有挑战性的一个技术难题. 为此,今天我们邀请阿里高级技术专家于皋,和大家深入探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿 ...

  2. 微服务架构下得分布式事务解决方案

    1.开源解决方案 框架名称 GitHub地址 社区开源项目dts https://github.com/venusteam/dts tcc-transaction https://github.com ...

  3. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  4. Sers微服务快速入门-01.简介

    微服务给我们的第一映像是分布式.架构复杂庞大,部署起来非常麻烦.其实并非如此,不同的架构选型必然带来不同的优点和缺点,没有一劳永逸的方法,配置简单是因为适用的功能场景简单.在项目或产品的实际开发中往往 ...

  5. Sers微服务快速入门-02.快速接入

    微服务给我们的第一映像是架构复杂,部署起来麻烦.其实并非如此,不同的架构选型必然带来不同的优点和缺点,没有一劳永逸的方法,配置简单是因为适用的场景面窄.在项目或产品的实际开发中往往随着时间的推进需要实 ...

  6. Sers微服务快速入门-00.目录

    Sers微服务快速入门-00.目录 01.简介 02.快速接入 未完待续

  7. 刷完这套微服务+多线程+源码+分布式+调优试题,年薪50w还会是问题吗

    文章目录 前言 正文 一.Java基础(JVM.设计模式.容器.反射.对象拷贝.Java Web.异常.网络) 二.Java多线程与并发编程(多线程.JMM.HashMap) 三.开源框架(Sprin ...

  8. Java架构师-微服务:微服务架构【单体部署 --改造--> 微服务架构】【分布式:分散压力;微服务:分散能力】【RESTFul+Docker+K8S、SpringCloud】

    一.微服务概述 微服务架构是团队面对互联网产品爆发式增长的最优选择,要解决的是快速迭代.高可靠和高可用等问题,把复杂度很高的产品拆分成一些较小的模块,并遵循康威定律,每一个模块用5-9个小团队来维护, ...

  9. 如何实现微服务架构下的分布式事务?

    摘要:微服务架构下,如何克服分布式事务难题? 什么是微服务?微服务有什么优势和困难? 什么是微服务架构? 简而言之,微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不 ...

最新文章

  1. Html5之基础-7 HTML列表
  2. 土拍熔断意味着什么_半小时3宗地接连熔断 今日长沙土拍关键字:“焱”
  3. Windows2003 安装AD失败,未能为域创建GPO,出现了扩展错误 的解决方法
  4. 转换汇编到shellcode的过程
  5. Linux下安装 卸载mysql57 msyql80
  6. Node.js 线程你理解的可能是错的 1
  7. 计划产量导入功能修改:
  8. bash的算术运算和条件测试语句
  9. c# Settings.settings 存储数据,读取数据
  10. Ffplay视频播放流程
  11. 测试5g网速的软件排行榜,2021网络测速app排行榜-手机网速测试软件推荐
  12. python调用微信截图_Python调用微信截图工具
  13. 如何更好的使用谷歌搜索引擎
  14. linux查看隐藏大文件夹,Linux系统隐藏文件/文件夹操作教程
  15. spider_review-爬虫复习1.0
  16. 教程 | 用安卓手机搭建 web 服务器(三)—— 内网穿透
  17. 一个3D车道线检测方法PersFormer及其开源OpenLane数据集
  18. java poi导出excel插入图片
  19. 互动媒体技术——编程习作集
  20. MixMarvel行业分享专栏 韩国区块链市场观察:行业巨头布局区块链游戏领域

热门文章

  1. R语言包_knitr
  2. redis php异步队列,基于workerman的redis-queue实现异步邮件队列
  3. javascript 两个数组组成一个对象
  4. 15.并发工具类(解析hashtable,ConcurrentHashMap1.7与1.8的区别以及Semaphore)
  5. LeetCode 152. Maximum Product Subarray--动态规划--C++,Python解法
  6. LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法
  7. Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file syst
  8. gcc c语言标准,GCC 7.1发布 支持当前所有的C ++ 17标准
  9. 1480. 一维数组的动态和
  10. 一篇复习一下Spring和SpringMVC基本概念