我即将在aws上托管Java中创建分布式计算环境。我将有几个计算节点,需要生成唯一的UUID(稍后将用作数据库密钥)。
据我所知UUID规范说只有UUID Version 2对dce是安全的。
Java中是否存在任何实现?
答案 0 :(得分:1)
如果您关心的只是在分布式环境中随机生成的字符串,那么您应该能够依赖java.util.UUID中的UUID.randomUUID()
。
例如,查看DynamoDBMapper类,它为DynamoDB API提供高级抽象。对于标记为@DynamoDBHashKey
的所有@DynamoDBAutoGeneratedKey
字段,它在内部使用上述方法:
将分区键或排序键属性标记为自动生成。保存这些属性时,DynamoDBMapper将生成随机UUID。
如果它适用于DynamoDB,很可能它对您也有效!
答案 1 :(得分:1)
以下是类型2(不是基于随机的,而是基于时间的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 uuidType2= Generators.timeBasedGenerator(EthernetAddress.fromInterface()).generate().toString();
System.out.println("UUID=" +uuidType2);
}
}
答案 2 :(得分:0)
UUID id = UUID.randomUUID();
答案 3 :(得分:0)
是的,它存在,但是对于大多数应用程序来说,它并不是对资源的良好利用。我花了一段时间试图找到它,这就是为什么我在这里发布链接的原因: Java Practices -> Generating Unique IDs
这是一篇重要的文章,仅复制作品以将其张贴在此处似乎不合适。总之,您必须生成一个随机数,然后使用其摘要形成适当的长度字符串。这样做可能很耗时,因此不适合您要“即时”创建的ID。