From adc0cf4d40a2c4bd443ef93c4b5033a0fde7d81d Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Mon, 29 Jul 2019 11:05:07 +0800 Subject: [PATCH] =?UTF-8?q?[IdWorker][=E4=BF=AE=E6=94=B9]:IdWorker?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/common/IdWorker.java | 22 ++++++++++++------- .../main/java/com/iformall/utils/IPUtil.java | 3 ++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/IdWorker.java b/mallinkService/src/main/java/com/iformall/common/IdWorker.java index f2c0fa34a..cafe85b1a 100644 --- a/mallinkService/src/main/java/com/iformall/common/IdWorker.java +++ b/mallinkService/src/main/java/com/iformall/common/IdWorker.java @@ -1,6 +1,8 @@ package com.iformall.common; import com.iformall.utils.IPUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.management.ManagementFactory; import java.net.UnknownHostException; @@ -16,6 +18,7 @@ import java.util.List; */ public class IdWorker { + private final Logger logger = LoggerFactory.getLogger(IdWorker.class); // ==============================Fields=========================================== /** 开始时间截 (2015-01-01) */ private final long twepoch = 1489111610226L; @@ -60,16 +63,19 @@ public class IdWorker { private long lastTimestamp = -1L; ///////////////////////////////////////////////////////////////////////////////// - - private static class IdGenHolder { - private static final IdWorker instance = new IdWorker(); - } - - public static IdWorker get(){ - return IdGenHolder.instance; + private static IdWorker instance = null; + public static IdWorker get() { + if(instance == null) { + synchronized (IdWorker.class){ + if(instance==null){ + instance = new IdWorker(); + } + } + } + return instance; } - public IdWorker() { + private IdWorker() { String ipAddr = ""; try { ipAddr = IPUtil.getLocalHostLANAddress().getHostAddress(); diff --git a/mallinkService/src/main/java/com/iformall/utils/IPUtil.java b/mallinkService/src/main/java/com/iformall/utils/IPUtil.java index bff1934f0..f3b138b42 100644 --- a/mallinkService/src/main/java/com/iformall/utils/IPUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/IPUtil.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; +import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.UnknownHostException; @@ -62,7 +63,7 @@ public class IPUtil { // 在所有的接口下再遍历IP for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) { InetAddress inetAddr = (InetAddress) inetAddrs.nextElement(); - if (!inetAddr.isLoopbackAddress()) {// 排除loopback类型地址 + if (!inetAddr.isLoopbackAddress() && (inetAddr instanceof Inet4Address)) {// 排除loopback类型地址, ipv4 if (inetAddr.isSiteLocalAddress()) { // 如果是site-local地址,就是它了 return inetAddr;