最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot隨機(jī)端口啟動(dòng)的實(shí)現(xiàn)

 更新時(shí)間:2021年07月21日 17:13:44   作者:TianXinCoord  
本文主要介紹了SpringBoot隨機(jī)端口啟動(dòng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、SpringBoot隨機(jī)端口

1.基礎(chǔ)介紹

  • 隨機(jī)端口可以自動(dòng)找指定范圍內(nèi)可使用的端口,不需要在配置文件中指定固定的啟動(dòng)端口
  • 例如在SpringBoot中假如需要運(yùn)行多個(gè)實(shí)例,則需要單獨(dú)修改配置文件比較麻煩
  • 隨機(jī)端口的原理就是與對應(yīng)socket端口建立連接,能連接則已被使用,反之未被使用
  • 隨機(jī)獲取的端口校驗(yàn)可使用之后通過System.setProperty("屬性名稱", port);寫入內(nèi)存,然后就可以在配置文件中獲取到
  • 如果寫入的名稱為server.port則不用在配置文件中指定端口,否則需要配置server.port=${屬性名稱}
  • 本實(shí)踐基于SpringBoot普通工程,直接創(chuàng)建項(xiàng)目腳手架即可
  • 【tip】例如在SpringCloud項(xiàng)目中服務(wù)提供者,可以使用隨機(jī)端口快速啟動(dòng)多個(gè)服務(wù),而不需要單獨(dú)修改配置文件再啟動(dòng)

2.實(shí)現(xiàn)步驟

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

a. 指定端口范圍為8000-65535
b. 識別端口是否使用,已被使用則繼續(xù)隨機(jī)產(chǎn)生
c. 如果全部端口不可使用則直接拋出錯(cuò)誤,中斷運(yùn)行

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();
		// 最大嘗試次數(shù)為端口范圍
        int maxRetryCount = MAX_PORT - MIN_PORT;
        while (maxRetryCount > 0) {
        	// 指定范圍內(nèi)隨機(jī)端口,隨便寫的算法,根據(jù)自己需要調(diào)整
            int port = random.nextInt(MAX_PORT - MIN_PORT) + MIN_PORT;
            boolean isUsed = isLocalePortUsing(port);
            if (!isUsed) {
                return String.valueOf(port);
            }
            --maxRetryCount;
        }
        System.out.println("系統(tǒng)暫無端口可用,運(yùn)行結(jié)束");
        System.exit(1);
        return null;
    }

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

創(chuàng)建StartCommand.java命令類,調(diào)用隨機(jī)端口功能獲取端口信息,然后將端口信息寫入運(yùn)行環(huán)境中
a. 如果傳入的參數(shù)包含了端口則使用指定的,否則使用自動(dòng)生成

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);
    }
}

在啟動(dòng)類啟動(dòng)前向環(huán)境寫入端口信息

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);
    }
}

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

server:
  # 隨機(jī)端口配置
  port: ${auto.port}

項(xiàng)目測試 正常啟動(dòng)項(xiàng)目,可以在控制臺看到啟動(dòng)的端口信息

在這里插入圖片描述

在這里插入圖片描述

二、SpringBoot多實(shí)例運(yùn)行

SpringBoot的多實(shí)例運(yùn)行在IDEA中配置如下

在這里插入圖片描述

在這里插入圖片描述

然后在啟動(dòng)上run/debug啟動(dòng)即可

到此這篇關(guān)于SpringBoot隨機(jī)端口啟動(dòng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot隨機(jī)端口啟動(dòng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單了解springboot加載配置文件順序

    簡單了解springboot加載配置文件順序

    這篇文章主要介紹了簡單了解springboot加載配置文件順序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • JAVA swing布局管理器實(shí)例解析

    JAVA swing布局管理器實(shí)例解析

    這篇文章主要介紹了JAVA swing布局管理器實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 使用Log4j2代碼方式配置實(shí)現(xiàn)線程級動(dòng)態(tài)控制

    使用Log4j2代碼方式配置實(shí)現(xiàn)線程級動(dòng)態(tài)控制

    這篇文章主要介紹了使用Log4j2代碼方式配置實(shí)現(xiàn)線程級動(dòng)態(tài)控制,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring?Cloud?Alibaba?Nacos服務(wù)治理平臺服務(wù)注冊、RestTemplate實(shí)現(xiàn)微服務(wù)之間訪問負(fù)載均衡訪問的問題

    Spring?Cloud?Alibaba?Nacos服務(wù)治理平臺服務(wù)注冊、RestTemplate實(shí)現(xiàn)微服務(wù)之間訪

    這篇文章主要介紹了Spring?Cloud?Alibaba:Nacos服務(wù)治理平臺,服務(wù)注冊、RestTemplate實(shí)現(xiàn)微服務(wù)之間訪問,負(fù)載均衡訪問,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的原理與實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的原理與實(shí)現(xiàn)

    平衡樹(Balance Tree,BT) 指的是,任意節(jié)點(diǎn)的子樹的高度差都小于等于1。常見的符合平衡樹的有,B樹(多路平衡搜索樹)、AVL樹(二叉平衡搜索樹)等。本文將詳細(xì)介紹平衡二叉樹的概念和實(shí)現(xiàn)原理以及它的實(shí)現(xiàn)
    2022-01-01
  • java 異常捕獲及處理案例詳解

    java 異常捕獲及處理案例詳解

    這篇文章主要介紹了java 異常捕獲及處理案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • java上乘武功入門--反射

    java上乘武功入門--反射

    反射是Java的一種機(jī)制,一般也叫做反射機(jī)制,本文會講反射機(jī)制是什么和怎么使用,喜歡的朋友可以觀看一下,希望能給你帶來幫助
    2021-07-07
  • Java超詳細(xì)介紹抽象類與接口的使用

    Java超詳細(xì)介紹抽象類與接口的使用

    在類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • java中TestNG使用教程詳解

    java中TestNG使用教程詳解

    TestNG是Java中的一個(gè)測試框架, 類似于JUnit 和NUnit, 本文主要介紹了java中TestNG使用教程詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式

    springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式

    這篇文章主要介紹了springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

安泽县| 师宗县| 东方市| 安徽省| 鹿泉市| 临清市| 江口县| 沛县| 石河子市| 岳阳市| 鄂托克前旗| 巴林右旗| 德兴市| 山西省| 江陵县| 周口市| 视频| 河北区| 东阿县| 潼南县| 拉萨市| 乌拉特前旗| 二手房| 高邑县| 叙永县| 海口市| 长岛县| 九江县| 横峰县| 库伦旗| 铜山县| 石嘴山市| 上饶县| 凌源市| 历史| 扬中市| 饶阳县| 清水县| 陕西省| 漳州市| 淳安县|