SnowFlakeUtil.java 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package org.springblade.modules.project.utils;
  2. import cn.hutool.core.lang.Snowflake;
  3. import cn.hutool.core.util.IdUtil;
  4. public class SnowFlakeUtil {
  5. private long machineId;
  6. private long dataCenterId;
  7. public SnowFlakeUtil(long machineId, long dataCenterId) {
  8. this.machineId = machineId;
  9. this.dataCenterId = dataCenterId;
  10. }
  11. /**
  12. * 成员类,SnowFlakeUtil的实例对象的保存域
  13. */
  14. private static class IdGenHolder {
  15. private static final SnowFlakeUtil instance = new SnowFlakeUtil();
  16. }
  17. /**
  18. * 外部调用获取SnowFlakeUtil的实例对象,确保不可变
  19. */
  20. public static SnowFlakeUtil get() {
  21. return IdGenHolder.instance;
  22. }
  23. /**
  24. * 初始化构造,无参构造有参函数,默认节点都是0
  25. */
  26. public SnowFlakeUtil() {
  27. this(0L, 0L);
  28. }
  29. private Snowflake snowflake = IdUtil.createSnowflake(machineId, dataCenterId);
  30. public synchronized long id() {
  31. return snowflake.nextId();
  32. }
  33. public static Long getId() {
  34. return SnowFlakeUtil.get().id();
  35. }
  36. }