diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
index f25502b3..0a95822d 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
@@ -129,7 +129,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
private NetComServerFactory serverFactory = new NetComServerFactory();
private void initExecutorServer(int port, String ip, String appName, String accessToken) throws Exception {
// valid param
- port = port>0?port: NetUtil.findAvailablePort(9999);
+ port = port>0?port: NetUtil.findAvailablePort(9999,ip);
// start server
NetComServerFactory.putService(ExecutorBiz.class, new ExecutorBizImpl()); // rpc-service, base on jetty
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/NetUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/NetUtil.java
index a10b17be..4642e887 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/util/NetUtil.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/NetUtil.java
@@ -2,8 +2,10 @@ package com.xxl.job.core.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
import java.io.IOException;
+import java.net.InetSocketAddress;
import java.net.ServerSocket;
/**
@@ -15,23 +17,24 @@ public class NetUtil {
private static Logger logger = LoggerFactory.getLogger(NetUtil.class);
/**
- * find avaliable port
+ * find avaliable port by ip
*
* @param defaultPort
+ * @param ip
* @return
*/
- public static int findAvailablePort(int defaultPort) {
+ public static int findAvailablePort(int defaultPort,String ip) {
int portTmp = defaultPort;
while (portTmp < 65535) {
- if (!isPortUsed(portTmp)) {
+ if (!isPortUsed(portTmp,ip)) {
return portTmp;
} else {
portTmp++;
}
}
- portTmp = defaultPort--;
+ portTmp = --defaultPort;
while (portTmp > 0) {
- if (!isPortUsed(portTmp)) {
+ if (!isPortUsed(portTmp,ip)) {
return portTmp;
} else {
portTmp--;
@@ -40,18 +43,34 @@ public class NetUtil {
throw new IllegalStateException("no available port.");
}
+ /**
+ * find avaliable port
+ *
+ * @param defaultPort
+ * @return
+ */
+ public static int findAvailablePort(int defaultPort) {
+ return findAvailablePort(defaultPort,null);
+ }
+
+
/**
* check port used
*
* @param port
+ * @param ip 为空则为 InetAddress.anyLocalAddress()
* @return
*/
- public static boolean isPortUsed(int port) {
+ public static boolean isPortUsed(int port,String ip) {
boolean used = false;
ServerSocket serverSocket = null;
try {
- serverSocket = new ServerSocket(port);
- used = false;
+ if(StringUtils.isEmpty(ip)){
+ serverSocket = new ServerSocket(port);
+ }else {
+ serverSocket = new ServerSocket();
+ serverSocket.bind(new InetSocketAddress(ip,port));
+ }
} catch (IOException e) {
logger.debug(">>>>>>>>>>> xxl-job, port[{}] is in use.", port);
used = true;
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml
index afa930db..ba5543a6 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml
@@ -29,7 +29,7 @@
-
+