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解决方案无疑是目前最方便的方案,当然,也可以采用其他方案;自由选择;

最新文章

  1. Xilinx下载安装与在win10闪退问题解决方法
  2. 获取当前方法名,行号,类名,所在java文件第几行
  3. mybais整合的框架没有sql-debug输出
  4. oracle数据库导入导出
  5. MySQL性能优化的最佳21条经验
  6. 按键使用方法(二)------verilog
  7. (32)odoo中的编码问题
  8. java.util.concurrent 多线程框架
  9. mdf导入sqlServer
  10. Boost学习之可移植路径操作--filesystem
  11. Eclipse相关集锦第二季
  12. hdu1789 Doing Homework again---(经典贪心)
  13. 基于Servlet+jsp的web计算器
  14. Ansible-Zabbix-基础agent批量装机
  15. Spark Shuffle机制
  16. python-函数入门(二)
  17. Eigen子矩阵操作
  18. 关于微信JS SDK接口wx.previewImage预览接口的使用
  19. 让vim不要自动添加新的注释行
  20. WebGIS博客文本分析(词频分析)手动扒取 去除格式 词语分割 统计分析

热门文章

  1. express 洋葱模型 路由管理 中间件
  2. python接口自动化 - 断言(上)
  3. 为什么 max() 应该写成 b &lt; a ? a : b 呢?
  4. MySQL数据库练习题
  5. random模块python
  6. cinder api启动过程源码分析
  7. IA-32/centos7开机流程
  8. Linux系统时间同步方法
  9. 抗疫复产,CDN助企业破局发展
  10. 23种设计模式 - 单一职责(Decorator - Bridge)