使用hutool的jar包,里面已经包含雪花算法的工具类。
1、引入依赖包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0</version>
</dependency>
在java项目的编写工具类
package com.bestway.managementconfig.server.utils;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import java.net.Inet4Address;
/**
* @ClassName SnowflakeUtils
* @Description id生成器
* @create 2022/12/30 14:55
*/
public class SnowflakeUtils {
/**
* 入参prefix为code的前缀,可根据不同业务传值
*/
public static String snowflake(String prefix){
Snowflake snowflake = IdUtil.getSnowflake(getWorkId(), 1L);
String id = snowflake.nextIdStr();
return prefix + id;
}
/**
* workId使用IP生成
* @return workId
*/
private static Long getWorkId() {
try {
String hostAddress = Inet4Address.getLocalHost().getHostAddress();
int[] ints = StringUtils.toCodePoints(hostAddress);
int sums = 0;
for (int b : ints) {
sums = sums + b;
}
return (long) (sums % 32);
}
catch (Exception e) {
// 失败就随机
return RandomUtils.nextLong(0, 31);
}
}
}
测试使用
public static void main(String[] args) {
for (int i=0;i<100;i++) {
System.out.println(snowflake("CAD"));
}
}