package cn.lili.common.utils;
|
|
import cn.lili.cache.Cache;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
|
/**
|
* SnowflakeInitiator
|
*
|
* @author Chopper
|
* @version v1.0
|
* 2022-01-14 14:04
|
*/
|
@Component
|
@Slf4j
|
public class SnowflakeInitiator {
|
|
/**
|
* 缓存前缀
|
*/
|
private static final String KEY = "{Snowflake}";
|
|
@Autowired
|
private Cache cache;
|
|
/**
|
* 尝试初始化
|
*
|
* @return
|
*/
|
@PostConstruct
|
public void init() {
|
Long num = cache.incr(KEY);
|
long dataCenter = num / 32;
|
long workedId = num % 32;
|
//如果数据中心大于32,则抹除缓存,从头开始
|
if (dataCenter >= 32) {
|
cache.remove(KEY);
|
num = cache.incr(KEY);
|
dataCenter = num / 32;
|
workedId = num % 32;
|
}
|
SnowFlake.initialize(workedId, dataCenter);
|
}
|
|
public static void main(String[] args) {
|
SnowFlake.initialize(0, 8);
|
|
System.out.println(SnowFlake.getId());
|
}
|
}
|