在Java中生成UUID版本2

5
我即将在AWS上创建一个Java分布式计算环境。我将有多个计算节点,并需要生成唯一的UUID(稍后将用作数据库键)。
据我所知,UUID规范仅表示UUID Version 2适用于DCE。
是否有Java中的现有实现?

1
Java内置的UUID类可以表示任何版本的UUID(1、2、3、4和5)值,但只能生成版本4的值。生成其他类型的UUID需要查找库或使用外部资源,例如您的数据库。 - Basil Bourque
3个回答

2
如果您只关心在分布式环境中生成的随机字符串,应该可以依赖于 java.util.UUID 中的 UUID.randomUUID() 方法。
例如,看一下 DynamoDBMapper 类,它提供了 DynamoDB APIs 的高级抽象。 对于所有标记为 @DynamoDBAutoGeneratedKey@DynamoDBHashKey 字段,它在内部使用上述方法:

将分区键或排序键属性标记为自动生成。 DynamoDBMapper 将在保存这些属性时生成一个随机的 UUID

如果对于 DynamoDB 起作用,那么对于您来说也很可能会起作用!

我认为这是我应该使用的。但是在PutItemRequest之后,如何获取密钥?使用Java SDK withReturnValuesPutItemRequest只能返回旧值。 - Eric
使用DynamoDBMapper,它将返回整个已保存对象。 - ketan vijayvargiya

2
这里是 Type 1 UUID(非基于随机性,而是基于时间)的快速摘录:
Maven 依赖项:
<dependency>
    <groupId>com.fasterxml.uuid</groupId>
    <artifactId>java-uuid-generator</artifactId>
    <version>3.2.0</version>
</dependency>

示例应用:


import com.fasterxml.uuid.EthernetAddress;
import com.fasterxml.uuid.Generators;

/**
 * Java UUID Generator
 *
 */
public class UUIDVersionExample {

    public static void main(String[] args) {
        
    String uuidType1= Generators.timeBasedGenerator(EthernetAddress.fromInterface()).generate().toString();
       System.out.println("UUID=" +uuidType1);

    }

}

1
Generators.timeBasedGenerator() 方法将生成类型1 UUID。它不会生成UUID-2。 - Anurag Ratna

1
是的,它确实存在,但对于大多数应用程序来说并不是一个好的资源利用方式。我花了一些时间来找到它,这就是为什么我在这里发布链接的原因: Java实践->生成唯一ID 这是一篇重要的文章,仅仅复制工作并发布在这里似乎不合适。总之,您必须生成一个随机数,然后使用其摘要来形成一个适当长度的字符串。这样做可能耗时,并且因此不适合在“即兴”创建的ID。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接