中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot隨機端口啟動怎么實現

發布時間:2022-04-02 16:25:58 來源:億速云 閱讀:300 作者:iii 欄目:大數據

這篇文章主要介紹了SpringBoot隨機端口啟動怎么實現的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot隨機端口啟動怎么實現文章都會有所收獲,下面我們一起來看看吧。

一、SpringBoot隨機端口

1.基礎介紹

  • 隨機端口可以自動找指定范圍內可使用的端口,不需要在配置文件中指定固定的啟動端口

  • 例如在SpringBoot中假如需要運行多個實例,則需要單獨修改配置文件比較麻煩

  • 隨機端口的原理就是與對應socket端口建立連接,能連接則已被使用,反之未被使用

  • 隨機獲取的端口校驗可使用之后通過System.setProperty("屬性名稱", port);寫入內存,然后就可以在配置文件中獲取到

  • 如果寫入的名稱為server.port則不用在配置文件中指定端口,否則需要配置server.port=${屬性名稱}

  • 本實踐基于SpringBoot普通工程,直接創建項目腳手架即可

  • 【tip】例如在SpringCloud項目中服務提供者,可以使用隨機端口快速啟動多個服務,而不需要單獨修改配置文件再啟動

2.實現步驟

創建ServerPortUtil .java端口工具類,使用socket連接指定端口,例如有以下條件

a. 指定端口范圍為8000-65535
b. 識別端口是否使用,已被使用則繼續隨機產生
c. 如果全部端口不可使用則直接拋出錯誤,中斷運行

import java.net.InetAddress;
import java.net.Socket;
import java.util.Random;

public class ServerPortUtil {
    private static final int MAX_PORT = 65535;
    private static final int MIN_PORT = 8000;

    public static String getAvailablePort() {
        Random random = new Random();
		// 最大嘗試次數為端口范圍
        int maxRetryCount = MAX_PORT - MIN_PORT;
        while (maxRetryCount > 0) {
        	// 指定范圍內隨機端口,隨便寫的算法,根據自己需要調整
            int port = random.nextInt(MAX_PORT - MIN_PORT) + MIN_PORT;
            boolean isUsed = isLocalePortUsing(port);
            if (!isUsed) {
                return String.valueOf(port);
            }
            --maxRetryCount;
        }
        System.out.println("系統暫無端口可用,運行結束");
        System.exit(1);
        return null;
    }

    /**
     * 檢查給定端口是否可用
     *
     * @author tianxincode@163.com
     * @since 2020/10/14
     */
    public static boolean isLocalePortUsing(int port) {
        try {
            // 建立一個Socket連接, 如果該端口還在使用則返回true, 否則返回false, 127.0.0.1代表本機
            new Socket(InetAddress.getByName("127.0.0.1"), port);
            return true;
        } catch (Exception e) {
            // 異常說明端口連接不上,端口能使用
        }
        return false;
    }
}

創建StartCommand.java命令類,調用隨機端口功能獲取端口信息,然后將端口信息寫入運行環境中
a. 如果傳入的參數包含了端口則使用指定的,否則使用自動生成

import com.codecoord.randomport.util.ServerPortUtil;
import org.springframework.util.StringUtils;

public class StartCommand {
    /**
     * 端口屬性名稱,如果名稱為server.port則在配置文件中不用指定,否則需要指定為此處配置的名稱,如${auto.port}
     */
    private static final String SERVER_PORT = "auto.port";

    public StartCommand(String[] args) {
        boolean isServerPort = false;
        String serverPort = "";
        if (args != null) {
            for (String arg : args) {
                if (StringUtils.hasText(arg) && arg.startsWith("--server.port" )) {
                    isServerPort = true;
                    serverPort = arg;
                    break;
                }
            }
        }

        String port;
        if (isServerPort) {
           port = serverPort.split("=")[1];
        } else {
            port = ServerPortUtil.getAvailablePort();
        }
        System.out.println("Current project port is " + port);
        System.setProperty(SERVER_PORT, port);
    }
}

在啟動類啟動前向環境寫入端口信息

import com.codecoord.randomport.config.StartCommand;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicatio
public class SpringbootRandomPortApplication {
    public static void main(String[] args) {
        // 寫入端口信息 
        new StartCommand(args);
        SpringApplication.run(SpringbootRandomPortApplication.class, args);
    }
}

在配置文件中指定端口為隨機生成的端口信息

server:
  # 隨機端口配置
  port: ${auto.port}

項目測試 正常啟動項目,可以在控制臺看到啟動的端口信息

SpringBoot隨機端口啟動怎么實現

SpringBoot隨機端口啟動怎么實現

二、SpringBoot多實例運行

SpringBoot的多實例運行在IDEA中配置如下

SpringBoot隨機端口啟動怎么實現

SpringBoot隨機端口啟動怎么實現

然后在啟動上run/debug啟動即可

關于“SpringBoot隨機端口啟動怎么實現”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot隨機端口啟動怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寿光市| 安福县| 平湖市| 尼木县| 通州区| 霍邱县| 沧源| 筠连县| 明溪县| 博客| 翁源县| 时尚| 平度市| 安多县| 芦溪县| 宝兴县| 阿拉善右旗| 南丹县| 万源市| 昭通市| 榆中县| 江源县| 海安县| 莱芜市| 新余市| 法库县| 西城区| 瑞丽市| 宾川县| 广饶县| 元氏县| 武山县| 新化县| 诸暨市| 太保市| 平果县| 浦江县| 平乐县| 新昌县| 化州市| 富民县|