SpringBoot使用随机端口启动

1.获取可用端口工具类

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

2.获取到可用端口将端口信息写入运行环境中

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

3.SpringBoot启动前调用 

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

4.修改配置文件

server:# 随机端口配置port: ${auto.port}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux知识点 -- 网络基础 -- 数据链路层

Linux知识点 – 网络基础 – 数据链路层 文章目录 Linux知识点 -- 网络基础 -- 数据链路层一、数据链路层1.以太网2.以太网帧格式3.重谈局域网原理4.MAC地址5.MTU6.查看硬件地址和MTU的命令7.ARP协议 二、其他重要协议或技术1.DNS(Domain Name System)2.…

gunicorn

gunicorn 是一个 Python WSGI HTTP 服务器 可以用于运行 Python 网站或 Web 应用程序。 WSGI(Web Server Gateway Interface)定义了一种标准的接口, 将 Web 服务器和 Python 应用程序分离开来,使得 Web 服务器可以与不同的 Pytho…

[Machine learning][Part4] 线性回归模型技巧

目录 正规方程法 梯度下降法 缩放特征 学习率选择 正规方程法 这种方法可以不多次迭代梯度下降函数就能得到w,b。但是缺点是在大量数据训练情况下效率较低,其次是这种算法仅仅在线性回归中实现了,并没有在其他模型中实现,因此&#xff0c…

小程序A跳转小程序B并且自动登录

需求 例如有一个小程序A,A中有一个功能需要跳转小程序B进行查看。需要点击此功能跳转至小程序B,并且自动登录 实现方式 小程序A的跳转方法 wx.navigateToMiniProgram({appId: "目标小程序APPID",path: "目标小程序小程序页面",extraData: {use…

三相空气开关

一、三相空开的作用 三相空气开关对任意一相出现过载或短路,均起到保护作用。 二、三相空气开关原理图: 1、老式空气开关 1)、短路时,电磁脱钩器工作 2)、过载时,发热元件引起双金属片弯曲,使脱钩器工作 3)、测试按…

记一次SpringBoot中Service层未注入排查

同事自己在自己的电脑上写了一些小东西,遇到了请求时API层注入的Service为空问题。整体代码接口伪代码如下: public Interface ParentService{public String hello(String msg); } public abstract class ChildrenOneService implements ParentService…

RabbitMQ开启消息跟踪日志(trace)

Trace 是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的,需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 r…

别再使用循环的方式筛选元素了!开发常用的Stream流+Lambda表达式过滤元素了解过吗?10000字超详细解析

目录 1. Stream 流的简单展示 1.1 抛出问题 1.2 传统解决问题的编码方式 1.3 Stream 流的方式过滤元素 2. Stream 流的核心思想 3. Stream 流的使用 3.1 获取 stream 流 3.1.1 单列集合获取 stream 流 3.1.2 双列集合获取 stream 流 3.1.3 数组获取 stream 流 3.1.4…

低功耗蓝牙(BLE)开发——Qt

背景知识 低功耗蓝牙比经典蓝牙复杂些,需要了解一些协议的基础知识。 此部分参考博客GATT Profile 简介-CSDN博客 GATT详细介绍-CSDN博客 Introduction | Introduction to Bluetooth Low Energy | Adafruit Learning System 蓝牙 (四) GATT profile-CSDN博客 关…

Centos中利用自带的定时器Crontab_实现mysql数据库自动备份_linux中mysql自动备份脚本---Linux运维工作笔记056

这个经常需要,怕出问题因而需要经常备份数据库,可以利用centos自带的定时器,配合脚本实现自动备份. 1.首先查看一下,这个crontab服务有没有打开: 执行:ntsysv 可以看到已经开机自启动了. 注意这个操作界面,用鼠标不行,需要用,tab按键,直接tab到确定,或取消,然后按回车回到命…

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…

Docker-compos

Docker-compose 简介 Docker-Compose项目是基于Python开发的Docker官方开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#…

Java基础面试-重载和重写的区别

重载:发生在同一个类中&#xff0c;方法名必须相同&#xff0c;参数类型不同、个数不同、顺序不同&#xff0c;方法返回值和访问修饰符可 以不同&#xff0c;发生在编译时。 重写:发生在父子类中&#xff0c;方法名、参数列表必须相同&#xff0c;返回值范围小于等于父类&…

HSRP热备份路由器协议的解析和配置

HSRP的解析 个人简介 HSRP hot standby router protocol 热备份路由协议&#xff08;思科私有协议&#xff09; HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 &#xff01; 查…

记录一次线上fullgc问题排查过程

某天&#xff0c;接到测试部门反馈说线上项目突然很快&#xff0c;由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务&#xff0c;先关闭次任务后观察是否卡顿&#xff0c;并检查堆内存是否使用完造成频繁gc 1.通过jmap命令查看堆内存中的对象 2.生成当…

许战海战略文库|无增长则衰亡:中小型制造企业增长困境

竞争环境不是匀速变化&#xff0c;而是加速变化。企业的衰退与进化、兴衰更迭在不断发生&#xff0c;这成为一种不可避免的现实。事实上&#xff0c;在产业链竞争中增长困境不分企业大小&#xff0c;而是一种普遍存在的问题&#xff0c;许多收入在1亿至10亿美元间的制造企业也同…

【Redis】Redis中的Big Key问题:排查与解决思路

原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 Big Key问题介绍Big Key问题排查BIGKEYS命令Debug Objectmemory usage redis-rdb-tools Big Key问题解决思路分割大key对象压缩直接删除 在处理大型数据时&#xff0c;Redis 作为我们的非关系型数据库经常出…

PlantUML 绘图

官网 https://plantuml.com/zh/ 示例 绘制时序图 USB 枚举过程 PlantUML 源码 startuml host <-- device : device insert host note right : step 1 host -> device : get speed, reset, speed check note right : step 2 host -> device …

LONGLORA: EFFICIENT FINE-TUNING OF LONGCONTEXT LARGE LANGUAGE MODELS

本文是LLM系列文章&#xff0c;针对《LONGLORA: EFFICIENT FINE-TUNING OF LONGCONTEXT LARGE LANGUAGE MODELS》的翻译。 Longlora:长上下文大型语言模型的高效微调 摘要1 引言2 相关工作3 LongLoRA4 实验5 结论 摘要 我们提出了LongLoRA&#xff0c;一种有效的微调方法&…

Premiere Elements 2024(PR简化版)直装版

Adobe Premiere Elements 2024 是一款由Adobe Systems推出的视频编辑软件&#xff0c;它结合了易用性和专业级的功能&#xff0c;帮助用户对视频进行剪辑、特效、色彩校正等处理。 主要功能和特点&#xff1a; 导入和组织视频&#xff1a;Premiere Elements 2024允许用户快速导…