UUID.randomUUID() 生成的 UUID 是无序的,如果作为数据主键,不利于索引

Hibernate 的 UUIDHexGenerator.generate() 方法可以生成有序的 UUID, 本文参考其实现:

public class SequentialUuidHexGenerator extends AbstractUUIDGenerator{

private static final String sep = "-";

public static String generate() {

return

format( getJVM() ) + sep

+ format( getHiTime() ) + sep

+ format( getLoTime() ) + sep

+ format( getIP() ) + sep

+ format( getCount() );

}

protected static String format(int intValue) {

String formatted = Integer.toHexString( intValue );

StringBuilder buf = new StringBuilder( "00000000" );

buf.replace( 8 - formatted.length(), 8, formatted );

return buf.toString();

}

protected static String format(short shortValue) {

String formatted = Integer.toHexString( shortValue );

StringBuilder buf = new StringBuilder( "0000" );

buf.replace( 4 - formatted.length(), 4, formatted );

return buf.toString();

}

}

UUIDHexGenerator.generate() 将 IP 放在首位,考虑到在不同的机器生成,本文将时间戳放在了首位

AbstractUUIDGenerator 代码:

public abstract class AbstractUUIDGenerator {

private static final int IP;

static {

int ipadd;

try {

ipadd = BytesHelper.toInt( InetAddress.getLocalHost().getAddress() );

}

catch (Exception e) {

ipadd = 0;

}

IP = ipadd;

}

private static short counter = (short) 0;

private static final int JVM = (int) ( System.currentTimeMillis() >>> 8 );

public AbstractUUIDGenerator() {

}

protected static int getJVM() {

return JVM;

}

protected static short getCount() {

synchronized(AbstractUUIDGenerator.class) {

if ( counter < 0 ) {

counter=0;

}

return counter++;

}

}

protected static int getIP() {

return IP;

}

protected static short getHiTime() {

return (short) ( System.currentTimeMillis() >>> 32 );

}

protected static int getLoTime() {

return (int) System.currentTimeMillis();

}

}

BytesHelper 代码:

public final class BytesHelper {

private BytesHelper() {

}

public static int toInt(byte[] bytes) {

int result = 0;

for ( int i = 0; i < 4; i++ ) {

result = ( result << 8 ) - Byte.MIN_VALUE + (int) bytes[i];

}

return result;

}

}

java 生成 顺序 uuid_Java 生成有序 UUID相关推荐

  1. java 8位 uuid_JAVA生成短8位UUID详解

    短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUI ...

  2. 生成短的8位UUID(C#+JAVA)

    本算法首先随机生成一个32位字符的UUID:接着,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组:然后,通过分别将他们进行模91操作,通过模运算的结果,去字典数组中索引得到相应的字符. ...

  3. JAVA生成20位LONG型UUID

    编者在开发过程中用postman测试接口,发现要求id为必填且不能含有英文字母,问了对面开发人员才知道需要自己生成20位Long型uuid,写法大概如下,在需要生成的部分调用这个类即可. packag ...

  4. java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍

    POM文件 继承 Spring Boot 的父级依赖,只有继承它项目才是 Spring Boot 项目. spring-boot-starter-parent 是一个特殊的 starter, 它用来提 ...

  5. java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载

    java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成.解析.下载 自己用java搭建一个属于自己APP二维码合成网站.我的思路是这样的: 1.用户在前台表单提交APP的IOS和Andro ...

  6. bpmn 文件 服务器部署,Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题...

    Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 项目中需要前端查看流程的情况,所以需 ...

  7. 全局唯一递增的id_分布式ID生成方法-趋势有序的全局唯一ID

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  8. 【java】Java运行时动态生成类几种方式

    1.概述 转载:Java运行时动态生成类几种方式 这里发现自己不知道的,原来Java 还能自己编译自己,学到了. 最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则.这就要求根据数据库数据动态生 ...

  9. java实现后台直接生成二维码图片并直接上传到七牛云上面

    java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...

  10. java生成随机数,生成唯一hash值

    目录 java.util.Random.RandomStringUtils 常用方法: 可以使用该工具类生成唯一密钥 生成唯一hash值的其他方法:使用md5加密 java.util.Random.R ...

最新文章

  1. 文件查找和压缩——Linux基本命令(12)
  2. 人本质要好,要善良,要真诚,有格局和胸怀,有能力,有眼光,能讲故事,能找到人,能搞到钱...
  3. centos7 转换为lvm_[转] centos7 调整XFS格式的LVM大小
  4. (原)ubuntu16中编译boost1.61.0库
  5. 高速信号传输约翰逊 pdf_高速数字电路仿真设计与测试技术发展趋势综述 (一)...
  6. python代码模板_python 代码模板
  7. 经济专业为什么学python_既然有了会计学专业,为什么还要有税收学专业?
  8. bzoj 1079: [SCOI2008]着色方案
  9. 7种主流案例,告诉你调度器架构设计通用法则(干货!)
  10. 如何通过JMX远程监控Solr?
  11. 学习之法 —— 概念、名词、术语与定义的学习
  12. 三洋p6系列伺服电机说明书_苏州发那科伺服电机修理刹不住
  13. Java的中文转换拼音、五笔简码
  14. raw图各个格式之间的转换
  15. 落花人独立 微雨燕双飞
  16. Bandizip便携版右键菜单注册
  17. vasp计算压电系数_求助DFTP算出来的压电系数
  18. 如何让大学的青春少些遗憾!
  19. python将中文转换成utf8_如何在python中从unicode转换成utf8?
  20. opencv实现图片的素描化

热门文章

  1. 利用声子色散曲线推导刚度矩阵
  2. 刷单之骗人先交钱QQ,如何从qq,找到他的ip
  3. 超简单友盟分享(微信、QQ)+ 原生微信分享
  4. MyBatis防止SQL注入的方法
  5. ssm三个框架分别用来干什么_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
  6. 什么思维是大数据思维,大数据思维的核心是什么?
  7. 手机通话断了怎么显示链接服务器,手机每次通话三分钟就自动挂断了,怎么回事啊...
  8. linux虚拟机系统下安装jdk
  9. Java对象与JSON数据的相互转换
  10. python大数据论文_大数据环境下基于python的网络爬虫技术