| 
					
				 | 
			
			
				@@ -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--; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -41,17 +44,33 @@ public class NetUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 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; 
			 |