- 将IpUtil和NetUtil迁移至deprecated包并注释掉原始代码 - 引入新的IPTool工具类替代原有功能 - 更新JobTrigger中的IP获取逻辑 - 修改XxlJobExecutor中的IP和端口处理方式 - 使用StringTool替代原有的字符串判断逻辑pull/72/head
parent
84aae28ca2
commit
48ee4aa712
@ -1,206 +0,0 @@
|
|||||||
package com.xxl.job.core.util;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.Inet6Address;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.NetworkInterface;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ip tool
|
|
||||||
*
|
|
||||||
* @author xuxueli 2016-5-22 11:38:05
|
|
||||||
*/
|
|
||||||
public class IpUtil {
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(IpUtil.class);
|
|
||||||
|
|
||||||
private static final String ANYHOST_VALUE = "0.0.0.0";
|
|
||||||
private static final String LOCALHOST_VALUE = "127.0.0.1";
|
|
||||||
private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static volatile InetAddress LOCAL_ADDRESS = null;
|
|
||||||
|
|
||||||
// ---------------------- valid ----------------------
|
|
||||||
|
|
||||||
private static InetAddress toValidAddress(InetAddress address) {
|
|
||||||
if (address instanceof Inet6Address) {
|
|
||||||
Inet6Address v6Address = (Inet6Address) address;
|
|
||||||
if (isPreferIPV6Address()) {
|
|
||||||
return normalizeV6Address(v6Address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isValidV4Address(address)) {
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isPreferIPV6Address() {
|
|
||||||
return Boolean.getBoolean("java.net.preferIPv6Addresses");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* valid Inet4Address
|
|
||||||
*
|
|
||||||
* @param address
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static boolean isValidV4Address(InetAddress address) {
|
|
||||||
if (address == null || address.isLoopbackAddress()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
String name = address.getHostAddress();
|
|
||||||
boolean result = (name != null
|
|
||||||
&& IP_PATTERN.matcher(name).matches()
|
|
||||||
&& !ANYHOST_VALUE.equals(name)
|
|
||||||
&& !LOCALHOST_VALUE.equals(name));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* normalize the ipv6 Address, convert scope name to scope id.
|
|
||||||
* e.g.
|
|
||||||
* convert
|
|
||||||
* fe80:0:0:0:894:aeec:f37d:23e1%en0
|
|
||||||
* to
|
|
||||||
* fe80:0:0:0:894:aeec:f37d:23e1%5
|
|
||||||
* <p>
|
|
||||||
* The %5 after ipv6 address is called scope id.
|
|
||||||
* see java doc of {@link Inet6Address} for more details.
|
|
||||||
*
|
|
||||||
* @param address the input address
|
|
||||||
* @return the normalized address, with scope id converted to int
|
|
||||||
*/
|
|
||||||
private static InetAddress normalizeV6Address(Inet6Address address) {
|
|
||||||
String addr = address.getHostAddress();
|
|
||||||
int i = addr.lastIndexOf('%');
|
|
||||||
if (i > 0) {
|
|
||||||
try {
|
|
||||||
return InetAddress.getByName(addr.substring(0, i) + '%' + address.getScopeId());
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
// ignore
|
|
||||||
logger.debug("Unknown IPV6 address: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- find ip ----------------------
|
|
||||||
|
|
||||||
|
|
||||||
private static InetAddress getLocalAddress0() {
|
|
||||||
InetAddress localAddress = null;
|
|
||||||
// 1、prefer filter NetworkInterface
|
|
||||||
try {
|
|
||||||
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
|
|
||||||
if (null == interfaces) {
|
|
||||||
return localAddress;
|
|
||||||
}
|
|
||||||
while (interfaces.hasMoreElements()) {
|
|
||||||
try {
|
|
||||||
NetworkInterface network = interfaces.nextElement();
|
|
||||||
if (network.isLoopback() || network.isVirtual() || !network.isUp()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Enumeration<InetAddress> addresses = network.getInetAddresses();
|
|
||||||
while (addresses.hasMoreElements()) {
|
|
||||||
try {
|
|
||||||
InetAddress addressItem = toValidAddress(addresses.nextElement());
|
|
||||||
if (addressItem != null) {
|
|
||||||
try {
|
|
||||||
if(addressItem.isReachable(100)){
|
|
||||||
return addressItem;
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2、getLocalAddress
|
|
||||||
try {
|
|
||||||
localAddress = InetAddress.getLocalHost();
|
|
||||||
InetAddress addressItem = toValidAddress(localAddress);
|
|
||||||
if (addressItem != null) {
|
|
||||||
return addressItem;
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return localAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ---------------------- tool ----------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find first valid IP from local network card
|
|
||||||
*
|
|
||||||
* @return first valid local IP
|
|
||||||
*/
|
|
||||||
public static InetAddress getLocalAddress() {
|
|
||||||
if (LOCAL_ADDRESS != null) {
|
|
||||||
return LOCAL_ADDRESS;
|
|
||||||
}
|
|
||||||
InetAddress localAddress = getLocalAddress0();
|
|
||||||
LOCAL_ADDRESS = localAddress;
|
|
||||||
return localAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get ip address
|
|
||||||
*
|
|
||||||
* @return String
|
|
||||||
*/
|
|
||||||
public static String getIp(){
|
|
||||||
return getLocalAddress().getHostAddress();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get ip:port
|
|
||||||
*
|
|
||||||
* @param port
|
|
||||||
* @return String
|
|
||||||
*/
|
|
||||||
public static String getIpPort(int port){
|
|
||||||
String ip = getIp();
|
|
||||||
return getIpPort(ip, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getIpPort(String ip, int port){
|
|
||||||
if (ip==null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return ip.concat(":").concat(String.valueOf(port));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object[] parseIpPort(String address){
|
|
||||||
String[] array = address.split(":");
|
|
||||||
|
|
||||||
String host = array[0];
|
|
||||||
int port = Integer.parseInt(array[1]);
|
|
||||||
|
|
||||||
return new Object[]{host, port};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,70 +0,0 @@
|
|||||||
package com.xxl.job.core.util;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.ServerSocket;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* net util
|
|
||||||
*
|
|
||||||
* @author xuxueli 2017-11-29 17:00:25
|
|
||||||
*/
|
|
||||||
public class NetUtil {
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(NetUtil.class);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* find available port
|
|
||||||
*
|
|
||||||
* @param defaultPort
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static int findAvailablePort(int defaultPort) {
|
|
||||||
int portTmp = defaultPort;
|
|
||||||
while (portTmp < 65535) {
|
|
||||||
if (!isPortUsed(portTmp)) {
|
|
||||||
return portTmp;
|
|
||||||
} else {
|
|
||||||
portTmp++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
portTmp = defaultPort - 1;
|
|
||||||
while (portTmp > 0) {
|
|
||||||
if (!isPortUsed(portTmp)) {
|
|
||||||
return portTmp;
|
|
||||||
} else {
|
|
||||||
portTmp--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new RuntimeException("no available port.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* check port used
|
|
||||||
*
|
|
||||||
* @param port
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static boolean isPortUsed(int port) {
|
|
||||||
boolean used = false;
|
|
||||||
ServerSocket serverSocket = null;
|
|
||||||
try {
|
|
||||||
serverSocket = new ServerSocket(port);
|
|
||||||
used = false;
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.info(">>>>>>>>>>> xxl-job, port[{}] is in use.", port);
|
|
||||||
used = true;
|
|
||||||
} finally {
|
|
||||||
if (serverSocket != null) {
|
|
||||||
try {
|
|
||||||
serverSocket.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.info("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return used;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,206 @@
|
|||||||
|
//package com.xxl.job.core.util;
|
||||||
|
//
|
||||||
|
//import org.slf4j.Logger;
|
||||||
|
//import org.slf4j.LoggerFactory;
|
||||||
|
//
|
||||||
|
//import java.io.IOException;
|
||||||
|
//import java.net.Inet6Address;
|
||||||
|
//import java.net.InetAddress;
|
||||||
|
//import java.net.NetworkInterface;
|
||||||
|
//import java.net.UnknownHostException;
|
||||||
|
//import java.util.Enumeration;
|
||||||
|
//import java.util.regex.Pattern;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * ip tool
|
||||||
|
// *
|
||||||
|
// * @author xuxueli 2016-5-22 11:38:05
|
||||||
|
// */
|
||||||
|
//public class IpUtil {
|
||||||
|
// private static final Logger logger = LoggerFactory.getLogger(IpUtil.class);
|
||||||
|
//
|
||||||
|
// private static final String ANYHOST_VALUE = "0.0.0.0";
|
||||||
|
// private static final String LOCALHOST_VALUE = "127.0.0.1";
|
||||||
|
// private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// private static volatile InetAddress LOCAL_ADDRESS = null;
|
||||||
|
//
|
||||||
|
// // ---------------------- valid ----------------------
|
||||||
|
//
|
||||||
|
// private static InetAddress toValidAddress(InetAddress address) {
|
||||||
|
// if (address instanceof Inet6Address) {
|
||||||
|
// Inet6Address v6Address = (Inet6Address) address;
|
||||||
|
// if (isPreferIPV6Address()) {
|
||||||
|
// return normalizeV6Address(v6Address);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (isValidV4Address(address)) {
|
||||||
|
// return address;
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private static boolean isPreferIPV6Address() {
|
||||||
|
// return Boolean.getBoolean("java.net.preferIPv6Addresses");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * valid Inet4Address
|
||||||
|
// *
|
||||||
|
// * @param address
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private static boolean isValidV4Address(InetAddress address) {
|
||||||
|
// if (address == null || address.isLoopbackAddress()) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// String name = address.getHostAddress();
|
||||||
|
// boolean result = (name != null
|
||||||
|
// && IP_PATTERN.matcher(name).matches()
|
||||||
|
// && !ANYHOST_VALUE.equals(name)
|
||||||
|
// && !LOCALHOST_VALUE.equals(name));
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * normalize the ipv6 Address, convert scope name to scope id.
|
||||||
|
// * e.g.
|
||||||
|
// * convert
|
||||||
|
// * fe80:0:0:0:894:aeec:f37d:23e1%en0
|
||||||
|
// * to
|
||||||
|
// * fe80:0:0:0:894:aeec:f37d:23e1%5
|
||||||
|
// * <p>
|
||||||
|
// * The %5 after ipv6 address is called scope id.
|
||||||
|
// * see java doc of {@link Inet6Address} for more details.
|
||||||
|
// *
|
||||||
|
// * @param address the input address
|
||||||
|
// * @return the normalized address, with scope id converted to int
|
||||||
|
// */
|
||||||
|
// private static InetAddress normalizeV6Address(Inet6Address address) {
|
||||||
|
// String addr = address.getHostAddress();
|
||||||
|
// int i = addr.lastIndexOf('%');
|
||||||
|
// if (i > 0) {
|
||||||
|
// try {
|
||||||
|
// return InetAddress.getByName(addr.substring(0, i) + '%' + address.getScopeId());
|
||||||
|
// } catch (UnknownHostException e) {
|
||||||
|
// // ignore
|
||||||
|
// logger.debug("Unknown IPV6 address: ", e);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return address;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // ---------------------- find ip ----------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// private static InetAddress getLocalAddress0() {
|
||||||
|
// InetAddress localAddress = null;
|
||||||
|
// // 1、prefer filter NetworkInterface
|
||||||
|
// try {
|
||||||
|
// Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
|
||||||
|
// if (null == interfaces) {
|
||||||
|
// return localAddress;
|
||||||
|
// }
|
||||||
|
// while (interfaces.hasMoreElements()) {
|
||||||
|
// try {
|
||||||
|
// NetworkInterface network = interfaces.nextElement();
|
||||||
|
// if (network.isLoopback() || network.isVirtual() || !network.isUp()) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// Enumeration<InetAddress> addresses = network.getInetAddresses();
|
||||||
|
// while (addresses.hasMoreElements()) {
|
||||||
|
// try {
|
||||||
|
// InetAddress addressItem = toValidAddress(addresses.nextElement());
|
||||||
|
// if (addressItem != null) {
|
||||||
|
// try {
|
||||||
|
// if(addressItem.isReachable(100)){
|
||||||
|
// return addressItem;
|
||||||
|
// }
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// // ignore
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } catch (Throwable e) {
|
||||||
|
// logger.error(e.getMessage(), e);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } catch (Throwable e) {
|
||||||
|
// logger.error(e.getMessage(), e);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } catch (Throwable e) {
|
||||||
|
// logger.error(e.getMessage(), e);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 2、getLocalAddress
|
||||||
|
// try {
|
||||||
|
// localAddress = InetAddress.getLocalHost();
|
||||||
|
// InetAddress addressItem = toValidAddress(localAddress);
|
||||||
|
// if (addressItem != null) {
|
||||||
|
// return addressItem;
|
||||||
|
// }
|
||||||
|
// } catch (Throwable e) {
|
||||||
|
// logger.error(e.getMessage(), e);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return localAddress;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // ---------------------- tool ----------------------
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Find first valid IP from local network card
|
||||||
|
// *
|
||||||
|
// * @return first valid local IP
|
||||||
|
// */
|
||||||
|
// public static InetAddress getLocalAddress() {
|
||||||
|
// if (LOCAL_ADDRESS != null) {
|
||||||
|
// return LOCAL_ADDRESS;
|
||||||
|
// }
|
||||||
|
// InetAddress localAddress = getLocalAddress0();
|
||||||
|
// LOCAL_ADDRESS = localAddress;
|
||||||
|
// return localAddress;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * get ip address
|
||||||
|
// *
|
||||||
|
// * @return String
|
||||||
|
// */
|
||||||
|
// public static String getIp(){
|
||||||
|
// return getLocalAddress().getHostAddress();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * get ip:port
|
||||||
|
// *
|
||||||
|
// * @param port
|
||||||
|
// * @return String
|
||||||
|
// */
|
||||||
|
// public static String getIpPort(int port){
|
||||||
|
// String ip = getIp();
|
||||||
|
// return getIpPort(ip, port);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static String getIpPort(String ip, int port){
|
||||||
|
// if (ip==null) {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// return ip.concat(":").concat(String.valueOf(port));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static Object[] parseIpPort(String address){
|
||||||
|
// String[] array = address.split(":");
|
||||||
|
//
|
||||||
|
// String host = array[0];
|
||||||
|
// int port = Integer.parseInt(array[1]);
|
||||||
|
//
|
||||||
|
// return new Object[]{host, port};
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//}
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
//package com.xxl.job.core.util;
|
||||||
|
//
|
||||||
|
//import org.slf4j.Logger;
|
||||||
|
//import org.slf4j.LoggerFactory;
|
||||||
|
//
|
||||||
|
//import java.io.IOException;
|
||||||
|
//import java.net.ServerSocket;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * net util
|
||||||
|
// *
|
||||||
|
// * @author xuxueli 2017-11-29 17:00:25
|
||||||
|
// */
|
||||||
|
//public class NetUtil {
|
||||||
|
// private static Logger logger = LoggerFactory.getLogger(NetUtil.class);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * find available port
|
||||||
|
// *
|
||||||
|
// * @param defaultPort
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// public static int findAvailablePort(int defaultPort) {
|
||||||
|
// int portTmp = defaultPort;
|
||||||
|
// while (portTmp < 65535) {
|
||||||
|
// if (!isPortUsed(portTmp)) {
|
||||||
|
// return portTmp;
|
||||||
|
// } else {
|
||||||
|
// portTmp++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// portTmp = defaultPort - 1;
|
||||||
|
// while (portTmp > 0) {
|
||||||
|
// if (!isPortUsed(portTmp)) {
|
||||||
|
// return portTmp;
|
||||||
|
// } else {
|
||||||
|
// portTmp--;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// throw new RuntimeException("no available port.");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * check port used
|
||||||
|
// *
|
||||||
|
// * @param port
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// public static boolean isPortUsed(int port) {
|
||||||
|
// boolean used = false;
|
||||||
|
// ServerSocket serverSocket = null;
|
||||||
|
// try {
|
||||||
|
// serverSocket = new ServerSocket(port);
|
||||||
|
// used = false;
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// logger.info(">>>>>>>>>>> xxl-job, port[{}] is in use.", port);
|
||||||
|
// used = true;
|
||||||
|
// } finally {
|
||||||
|
// if (serverSocket != null) {
|
||||||
|
// try {
|
||||||
|
// serverSocket.close();
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// logger.info("");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return used;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
Loading…
Reference in new issue