Newer
Older
casic-iot-br / casic-public / src / main / java / com / casic / missiles / util / SnowFlakeUtil.java
casic_zt on 27 Dec 1 KB 同步日志+问题修复
package com.casic.missiles.util;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;

import javax.annotation.Resource;

@Resource
public class SnowFlakeUtil {
    private long machineId ;
    private long dataCenterId ;


    public SnowFlakeUtil(long machineId, long dataCenterId) {
        this.machineId = machineId;
        this.dataCenterId = dataCenterId;
    }

    /**
     * 成员类,SnowFlakeUtil的实例对象的保存域
     */
    private static class IdGenHolder {
        private static final SnowFlakeUtil instance = new SnowFlakeUtil();
    }

    /**
     * 外部调用获取SnowFlakeUtil的实例对象,确保不可变
     */
    public static SnowFlakeUtil get() {
        return IdGenHolder.instance;
    }

    /**
     * 初始化构造,无参构造有参函数,默认节点都是0
     */
    public SnowFlakeUtil() {
        this(0L, 0L);
    }

    private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId);

    public synchronized long id(){
        return snowflake.nextId();
    }

    public static Long getId() {
        return SnowFlakeUtil.get().id();
    }
}