色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

SpringBoot隨機端口啟動的實現

瀏覽:83日期:2023-02-24 09:51:24
目錄一、SpringBoot隨機端口1.基礎介紹2.實現步驟二、SpringBoot多實例運行一、SpringBoot隨機端口1.基礎介紹 隨機端口可以自動找指定范圍內可使用的端口,不需要在配置文件中指定固定的啟動端口 例如在SpringBoot中假如需要運行多個實例,則需要單獨修改配置文件比較麻煩 隨機端口的原理就是與對應socket端口建立連接,能連接則已被使用,反之未被使用 隨機獲取的端口校驗可使用之后通過System.setProperty('屬性名稱', port);寫入內存,然后就可以在配置文件中獲取到 如果寫入的名稱為server.port則不用在配置文件中指定端口,否則需要配置server.port=${屬性名稱} 本實踐基于SpringBoot普通工程,直接創建項目腳手架即可 【tip】例如在SpringCloud項目中服務提供者,可以使用隨機端口快速啟動多個服務,而不需要單獨修改配置文件再啟動 2.實現步驟

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

a. 指定端口范圍為8000-65535b. 識別端口是否使用,已被使用則繼續隨機產生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;@SpringBootApplicatiopublic 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隨機端口啟動內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 精品在线免费观看 | 亚洲精品欧美精品一区二区 | 久久久久综合一本久道 | 手机在线毛片免费播放 | 香蕉tv亚洲专区在线观看 | 久久精品国产精品亚洲精品 | 波多野结衣在线观看高清免费资源 | 精品久久久日韩精品成人 | 欧美高清一级 | 久草高清在线 | 成人欧美视频在线观看 | 欧美日韩精品一区二区三区 | 99久久成人国产精品免费 | 国内精品九一在线播放 | 国产精品国内免费一区二区三区 | 精品国产一区二区三区不卡蜜臂 | 亚洲二区在线 | 欧美精品国产精品 | 免费的一级片网站 | 成人在免费视频手机观看网站 | 亚洲最大福利视频 | 亚洲免费成人在线 | 国产成人精品男人的天堂538 | 美日韩一区二区 | 国产精品久久久久久久久福利 | 99视频只有精品 | 日本高清福利视频在线观看 | 男人天堂新地址 | 亚洲一区二区免费看 | 免费看一毛一级毛片视频 | 国产精品私人玩物在线观看 | 九九精品免视看国产成人 | 国内精品伊人久久久久妇 | 中文字幕精品在线 | 国产又粗又黄又湿又大 | 5388国产亚洲欧美在线观看 | 久久久高清免费视频 | 日韩欧美综合在线二区三区 | 日本aaaa级毛片在线看 | 日韩欧美一级毛片精品6 | 手机看片1024精品日韩 |