日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Spring boot隨機端口你都不會還怎么動態擴容

瀏覽:128日期:2023-05-16 17:32:08

一般情況下每個spring boot工程啟動都有固定的端口,但是固定端口不利用服務的動態擴容,如果在一臺服務器上需要對同一個服務進行多實例部署,很容易出現端口沖突,那么怎么解決這個問題呢?

random隨機端口

在spring boot中,可以通過${random}來生成隨機數字,我們可以在配置文件中,這么設置端口:

server.port=${random.int(2000,8000)}

通過random.int方法,指定生成2000~8000的隨機端口。這樣每次啟動的端口都不一樣。

多次啟動,發現每次的端口都不一致說明配置成功。

Spring boot隨機端口你都不會還怎么動態擴容

Spring boot隨機端口你都不會還怎么動態擴容

注意事項:這里需要注意spring boot項目啟動屬性文件的加載順序,spring boot的屬性是由里向外加載,所以最外層的最后被加載,會覆蓋里層的屬性。所以如果主動在啟動命令中使用?server.port配置了項目的端口號,那么屬性文件中配置的隨機端口屬性就不會生效。

通過System.setProperty設置有效隨機端口

上面的方法雖然暫時達到了想要的效果,但是有個問題:如果生成的這個隨機端口已經被使用了,那么項目啟動就會出現端口沖突。

那么,我們能否通過一個檢測機制,讓生成的隨機端口一定是一個沒有被占用的有效的隨機端口呢?

有效端口檢測原理:

通過建立socket連接,Socket socket = new Socket(Address,port);#address代表主機的IP地址,port代表端口號如果對該主機的特定端口號能建立一個socket,則說明該主機的該端口在使用。Socket socket = new Socket(Address,port);#address代表主機的IP地址,port代表端口號如果對該主機的特定端口號能建立一個socket,則說明該主機的該端口在使用。

實現思路:

通過在項目啟動前,獲取有效的隨機端口并通過System.setProperty將變量設置到系統的全局變量中,這樣項目啟動時就可以從全局變量中獲取到server.port變量的值。這里的system,系統指的是 JRE (runtime)system,即設置jvm運行時的全局變量。

工具類:

@Slf4jpublic class NetUtils { /** * 測試本機端口是否被使用 * @param port * @return */ public static boolean isLocalPortUsing(int port){ boolean flag = true; try { //如果該端口還在使用則返回true,否則返回false,127.0.0.1代表本機 flag = isPortUsing('127.0.0.1', port); } catch (Exception e) { } return flag; } /*** * 測試主機Host的port端口是否被使用 * @param host * @param port * @throws UnknownHostException */ public static boolean isPortUsing(String host,int port) { boolean flag = false; try { InetAddress Address = InetAddress.getByName(host); Socket socket = new Socket(Address,port); //建立一個Socket連接 flag = true; } catch (IOException e) { //log.info(e.getMessage(),e); } return flag; } //start--end是所要檢測的端口范圍 static int start=0; static int end=1024; /** * 由于本機上安裝了mysql,采用3306端口去驗證 * @param args */ public static void main(String args[]){ int testPost =3306; if(isLocalPortUsing(testPost)){System.out.println('端口 '+testPost+' 已被使用'); }else{System.out.println('端口 '+testPost+'未使用'); } }}

public class ServerPortUtils { /** * 獲取可用端口 * @return */ public static int getAvailablePort(){ int max = 65535; int min = 2000; Random random = new Random(); int port = random.nextInt(max)%(max-min +1) + min; boolean using = NetUtils.isLocalPortUsing(port); if(using){ return getAvailablePort(); }else{ return port; } }}

項目啟動前設置server.port環境變量

/** * 開始命令 */@Slf4jpublic class StartCommand { 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; } } } //沒有指定端口,則隨機生成一個可用的端口 if(!isServerPort){ int port = ServerPortUtils.getAvailablePort(); log.info('current server.port=' + port); System.setProperty('server.port',String.valueOf(port)); }else{//指定了端口,則以指定的端口為準 log.info('current server.port=' + serverPort.split('=')[1]); System.setProperty('server.port',serverPort.split('=')[1]); } }}

啟動類調用方法:

@SpringBootApplication@EnableUserClient@RestControllerpublic class DemoApplication { @Autowired Environment environment; public static void main(String[] args) { new StartCommand(args); SpringApplication.run(DemoApplication.class, args); }}

通過自定義PropertiesPropertySource屬性源實現

public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { //MapPropertySource Properties properties = new Properties(); properties.put('server.port', ServerPortUtils.getAvailablePort()); System.out.println(properties.get('server.port')); PropertiesPropertySource source = new PropertiesPropertySource('myCustom', properties); environment.getPropertySources().addLast(source); //environment.getPropertySources().addAfter(); }}

通過配置在resources/META-INF/spring.factories文件中使用全名注冊

org.springframework.boot.env.EnvironmentPostProcessor=com.laowan.demo.command.MyEnvironmentPostProcessor

這樣在項目啟動后,就會將該屬性源加載到Environment中。

Spring boot隨機端口你都不會還怎么動態擴容

總結

1、為什么要設置隨機端?主要是為了解決動態擴容時出現端口沖突的問題。2、怎么獲取一個有效的隨機端口號3、spring boot下實現隨機端口的三種方式。關于方式三的自定義屬性源的實現方式可以多多品味,實踐一下,更好的體會屬性文件的加載順序。

到此這篇關于Spring boot隨機端口你都不會還怎么動態擴容的文章就介紹到這了,更多相關Spring boot隨機端口內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
深夜福利亚洲| 亚洲不卡视频| 免费在线欧美黄色| 婷婷成人av| 中文另类视频| 精品视频在线一区二区在线| 日韩成人精品一区二区三区| 国产一区成人| 亚洲欧美日韩国产综合精品二区| 国产在线日韩| 鲁鲁在线中文| 视频一区二区中文字幕| 亚洲女人av| 欧美搞黄网站| 伊人精品久久| 91福利精品在线观看| 国产亚洲在线观看| 中文久久精品| 好吊日精品视频| 午夜日韩在线| 成年男女免费视频网站不卡| 国产成人精品亚洲线观看 | 西西人体一区二区| 国产成人精品一区二区三区免费 | 日韩精品影视| 午夜国产欧美理论在线播放 | 亚洲性色av| 亚洲精品1区2区| 99香蕉国产精品偷在线观看| 亚洲一级大片| 麻豆91在线播放| 97欧美在线视频| 欧美不卡在线| 国产精品chinese| 中文字幕中文字幕精品| 日韩一区精品| 国产精品一国产精品| 久久不见久久见国语| 日韩久久视频| 中文字幕亚洲在线观看| 国产精选久久| 91成人超碰| 日韩高清不卡在线| 国产成人精品999在线观看| 高清av不卡| 在线精品福利| 亚洲精品在线影院| 亚洲欧美在线专区| 老色鬼精品视频在线观看播放| 精品国产成人| 国产精品一区2区3区| 视频一区在线播放| 天堂日韩电影| 久久国际精品| 综合日韩av| 亚洲一区二区日韩| 日韩免费小视频| 国产精品亚洲产品| 亚洲一区欧美| 宅男噜噜噜66国产日韩在线观看| 国产剧情一区| 欧美天堂一区二区| 日韩午夜免费| 久久精品成人| 亚洲精品影视| 国产精品婷婷| 亚洲激情中文| 日韩欧美一区二区三区在线观看 | 日韩黄色在线观看| 国产麻豆久久| 久久久久久网| 国产精品一区高清| 中文无码久久精品| 免费av一区| 亚洲一级特黄| 美女少妇全过程你懂的久久| 久久久久久久久久久妇女| 国产精品毛片久久| 日韩综合一区| 国产精品成人a在线观看| 国产亚洲人成a在线v网站| 日韩国产欧美在线播放| 欧美精选视频一区二区| 伊人久久高清| 久久福利影视| 国产精品久久| 久久精品国产一区二区| 在线人成日本视频| 91麻豆精品| 四虎4545www国产精品| 久久精品二区三区| 尹人成人综合网| 亚洲精品女人| 成人在线超碰| 乱人伦精品视频在线观看| 欧美亚洲综合视频| 99精品视频在线| 88久久精品| 亚洲欧美日韩高清在线| 国产精品综合| 99精品99| 日韩精品永久网址| 日本少妇精品亚洲第一区| 精品免费视频| av一区二区高清| 日韩成人午夜精品| 久久wwww| 欧美a级片一区| 亚洲青青久久| 日本免费一区二区视频| 欧美亚洲免费| 国产极品一区| 偷拍精品精品一区二区三区| 亚洲欧美网站| 18国产精品| 三上悠亚国产精品一区二区三区| 日韩午夜一区| 精品高清久久| 欧美特黄视频| 久久国产精品色av免费看| av资源新版天堂在线| 亚洲成人精品| 日本不卡视频一二三区| 国产激情一区| 免费中文字幕日韩欧美| 久久精品国产在热久久| 美女久久一区| 日韩在线观看| 深夜福利亚洲| 美女网站一区| 国产一区二区三区四区大秀| 免费观看在线综合色| 97精品在线| 午夜精品久久久久久久久久蜜桃| 男人的天堂久久精品| 精品网站aaa| 91精品国产自产观看在线| 国产婷婷精品| 99久久婷婷这里只有精品| 精品国产成人| 日本免费一区二区视频| 免费看欧美美女黄的网站| 久久精品高清| 日韩在线视频精品| 成人影视亚洲图片在线| 国产伦精品一区二区三区在线播放 | 久久精品午夜| 国产精品毛片久久久| 日韩精品高清不卡| 亚洲少妇在线| 亚洲欧美视频| 蜜桃av一区二区| 巨乳诱惑日韩免费av| 99国产精品视频免费观看一公开 | 欧美99久久| 不卡一区2区| 欧美午夜精品一区二区三区电影| 日韩在线二区| 99久久精品费精品国产| 欧美aa一级| 婷婷激情综合| 国产午夜精品一区二区三区欧美 | 欧美在线黄色| 国产日韩一区二区三区在线播放| 久久精品97| 国产成人久久精品一区二区三区| 日韩成人亚洲| 日韩中文字幕av电影| 亚洲欧美日韩综合国产aⅴ| 亚洲一区欧美二区| 日本成人在线网站| 精品中文字幕一区二区三区| 丁香六月综合| 欧美日韩视频| 在线观看精品| 日韩欧美激情电影| 高清av不卡| 蜜桃久久精品一区二区| 国产激情久久| 中文日韩在线| 成人精品高清在线视频| 美女91精品| 好看的av在线不卡观看| 久久av中文| 欧美午夜精彩| 久久国产婷婷国产香蕉| 欧美成人高清| 久久精品国产网站| 蜜桃久久av一区| 欧美一区=区| | 国产调教一区二区三区| 亚洲资源在线| 五月天综合网站| 精品黄色一级片| 日韩欧美中文字幕一区二区三区| 播放一区二区| 精品视频在线观看网站| 欧美成a人片免费观看久久五月天| 在线视频精品|