IntelliJ IDEA 启动项目时配置端口指南

🌟 一、为什么需要手动设置启动端口?

默认情况下,Spring Boot 应用会使用 8080 端口启动。但在以下场景中,我们必须自定义端口:

  • 多个微服务同时运行,需避免端口冲突;
  • 团队协作开发,统一规范不同服务的端口号;
  • 测试负载均衡或集群部署;
  • CI/CD 环境下动态传入端口;
  • 调试时快速切换配置而不修改源码。

🔧 二、四种主流方式

方法一:通过配置文件设置端口(推荐用于常规开发)

这是最基础也是最常用的配置方式,适用于 Spring Boot 项目。

✅ 支持的配置文件类型
文件名格式说明
application.properties键值对格式,简洁明了
application.yml层级结构清晰,适合复杂配置
📝 操作步骤
  1. 打开你的项目资源目录:

    src/main/resources/
    
  2. 编辑 application.properties 文件,添加如下内容:

    server.port=8081
    

    或者编辑 application.yml 文件:

    server:port: 8081
    
  3. 保存文件后直接运行主类即可生效。

⚠️ 注意事项
  • 若未指定端口,默认使用 8080
  • 配置文件中的设置会被更高优先级的方式覆盖(见后文“优先级”章节)。
  • 推荐使用 .yml 格式以支持多 profile 配置(如 application-dev.yml, application-prod.yml)。
💡 最佳实践
# application.yml 示例:根据不同环境设置端口
spring:profiles:active: dev---
spring:config:activate:on-profile: dev
server:port: 8081---
spring:config:activate:on-profile: test
server:port: 9090

然后在运行配置中添加程序参数:--spring.profiles.active=test


方法二:通过 VM Options 设置端口(适合临时调试与多实例)

当你要在同一台机器上启动多个相同服务实例时,VM Options 是最实用的方式。

📌 关键点:新版 IDEA 默认隐藏部分高级选项,必须手动开启!

🛠️ 完整操作流程(含界面细节)
  1. 点击右上角运行配置下拉框 → 选择 Edit Configurations…

  2. 在左侧选择你的运行配置(通常是 Spring Boot 类型)

  3. 查找右侧是否有 “VM options:” 输入框:

    • 如果没有,请点击下方按钮:Modify Options
    • 弹出菜单后勾选 Add VM options
  4. 此时会出现输入框,在其中填写:

    -Dserver.port=8082
    
  5. 点击 ApplyOK

  6. 启动项目,查看控制台输出确认端口已变更:

    Tomcat started on port(s): 8082 (http)
    
🖼️ 新版 IDEA 界面提示(文字版)
  • “Modify Options” 按钮位于配置面板底部,图标为齿轮或三个点。
  • 勾选后,“VM options” 字段自动出现,支持 -Dkey=value 形式的 JVM 参数注入。
✅ 使用场景举例
场景配置示例
第一个实例-Dserver.port=8081
第二个实例-Dserver.port=8082
第三个实例-Dserver.port=8083

可复制多个运行配置,分别设置不同端口,实现一键并行启动。


方法三:通过 Program Arguments 设置端口(命令行风格)

与 VM Options 不同,这种方式是将参数传递给应用程序本身,而非 JVM。

📥 如何添加?
  1. 进入 Run/Debug Configurations
  2. 点击 Modify Options
  3. 勾选 Program arguments
  4. 输入:
    --server.port=8084
    
🔄 与 VM Options 的区别对比
维度VM Options (-D)Program Arguments (--)
作用对象JVM 系统属性应用程序参数
语法-Dkey=value--key=value
是否影响其他系统属性
Spring Boot 是否识别✅ 是✅ 是
优先级更高略低(但仍高于配置文件)

📝 注:两者均可被 Spring Boot 正确解析,但 -D 方式更底层,可用于非 Spring 项目。


方法四:通过环境变量设置端口(适合生产模拟与自动化)

某些云平台或容器化部署依赖环境变量来决定端口(如 Kubernetes、Docker)。

🧪 在 IDEA 中模拟环境变量
  1. 进入 Run Configuration
  2. 点击 Modify Options
  3. 勾选 Environment variables
  4. 添加键值对:
    • Key: SERVER_PORT
    • Value: 8085

或者写成一行:

SERVER_PORT=8085;JAVA_OPTS=-Xmx512m

💡 提示:Spring Boot 自动映射 SERVER_PORTserver.port

🌐 实际应用场景
# Docker 启动时指定
docker run -e SERVER_PORT=8086 my-spring-app

在本地 IDEA 中提前测试该行为,可极大提升部署稳定性。


🏆 三、四大方式优先级

Spring Boot 对端口配置有明确的优先级顺序,了解这一点至关重要:

优先级配置方式来源
1️⃣ 最高命令行参数--server.port=9000
2️⃣VM Options-Dserver.port=9000
3️⃣环境变量SERVER_PORT=9000
4️⃣配置文件application.yml / application.properties
5️⃣ 最低默认值内嵌服务器默认端口(Tomcat: 8080)

记忆口诀:“外 > 内,动 > 静” —— 外部传入 > 内部写死;动态传参 > 静态配置


🔄 四、进阶:多实例并行启动(Compound Configuration)

当你需要一次性启动多个不同端口的服务(例如订单服务 + 用户服务 + 网关),可以使用 Compound Configuration 功能。

🧩 操作步骤
  1. 打开 Edit Configurations
  2. 点击左上角 + 号 → 选择 Compound
  3. 命名(如:Microservices Cluster
  4. Included configurations 中添加多个已有的运行配置
  5. 每个子配置可独立设置端口(通过 VM Options)
  6. 点击运行按钮,所有服务将按顺序启动
🎯 优势
  • 一键启动整个微服务体系;
  • 支持跨模块联合调试;
  • 提升团队协作效率。

❌ 五、常见问题与解决方案

Q1:启动时报错 Address already in use: bind

说明端口已被占用。

解决方案:

Windows:

netstat -ano | findstr :8081
taskkill /PID <进程ID> /F

macOS/Linux:

lsof -i :8081
kill -9 <PID>

Q2:VM Options 选项找不到?

原因:新版 IDEA 默认隐藏。

✅ 正确做法:

  • 必须先进入 Modify Options
  • 主动勾选 Add VM options

Q3:端口改了但没生效?

检查:

  1. 是否拼错关键字(应为 server.port,不是 port.server
  2. 是否有多个配置文件冲突
  3. 是否使用了 Profile 激活了另一个配置
  4. 控制台日志是否显示最终使用的端口

📊 六、各方法适用场景总结

方法适用阶段是否推荐备注
配置文件日常开发✅ 强烈推荐易维护,版本控制友好
VM Options调试/多实例✅ 推荐灵活,不污染代码
Program Arguments命令行兼容✅ 推荐与脚本一致
环境变量生产模拟✅ 推荐符合 DevOps 实践
Compound 配置微服务联调✅ 强烈推荐提升开发效率

🧠 七、技术延伸

Spring Boot 使用 PropertySource 层次结构加载配置,形成一个有序的“配置栈”。你可以通过以下代码验证当前生效的端口来源:

@RestController
public class PortInfoController {@Value("${server.port}")private int port;@Autowiredprivate Environment env;@GetMapping("/port")public Map<String, Object> getPortInfo() {Map<String, Object> info = new HashMap<>();info.put("currentPort", port);info.put("propertySources", Arrays.toString(env.getPropertySources().stream().map(EnumerablePropertySource::getName).toArray()));return info;}
}

访问 /port 接口即可看到哪些配置源参与了决策。

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

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

相关文章

spark sql之from_json函数

目录前言函数语法参数说明返回值案例案例1案例2前言 在Spark SQL中&#xff0c;from_json函数用于解析包含JSON字符串的列&#xff0c;并将其转换为Spark SQL的结构化类型&#xff08;如struct、map或array&#xff09; 函数语法 from_json(jsonStr, schema [, options])参数…

数据结构 之 【位图的简介】

目录 1.位图的引入 2.位图概念 3.位图的实现 3.1前提准备 3.2set 3.3reset 3.4test 4.位图的应用 1.位图的引入 给40亿个不重复的无符号整数&#xff0c;没排过序 再给一个无符号整数&#xff0c;如何快速判断这个无符号整数是否在 这40亿个数中 首先&#xff0c;一个…

[iOS] ViewController 的生命周期

文章目录前言一、UIViewController 生命周期有关函数二、UIViewController 中函数的执行顺序运行结果1.present和dismiss2.push和pop三、总结前言 UIViewController 是在 iOS 开发中一个非常重要的角色&#xff0c;他是 view 和 model 的桥梁&#xff0c;通过 UIViewControlle…

第30章 零售与电商AI应用

本章将深入探讨人工智能在零售与电商领域的革命性应用。我们将从智能推荐系统、动态定价、库存管理到创新的虚拟试衣间&#xff0c;全面解析AI如何重塑购物体验和商业运营效率&#xff0c;并为每个关键技术点提供代码实战&#xff0c;帮助你掌握将AI应用于真实商业场景的能力。…

QT通过QModbusRtuSerialMaster读写电子秤数据实例

一、电子称常用功能&#xff1a;称重、清零、去皮&#xff1b;电子秤的通讯方式&#xff1a;Modbus通信、串口通信。二、QT读写电子秤软件界面如下&#xff1a;三、核心代码如下&#xff1a;.pro项目文件代码&#xff1a;QT core gui serialbus serialport.h头文件代码#…

sqlmap常用命令

ZZHow(ZZHow1024) 一、扫描注入点 1.GET方法&#xff0c;给URL&#xff1a; #探测该url是否存在漏洞 python sqlmap.py -u "http://192.168.10.1/sqli/Less-1/?id1"#如果我们已经知道admin这里是注入点的话&#xff0c;可以在其后面加个*来让sqlmap对其注入 python …

JVM如何排查OOM

当JVM&#xff08;Java虚拟机&#xff09;出现OOM&#xff08;OutOfMemoryError&#xff09;时&#xff0c;可以按照以下步骤和方法&#xff0c;用于帮助定位和解决JVM中的OOM问题1.查看异常堆栈信息查看异常堆栈信息&#xff08;StackTrace&#xff09;是定位问题的关键。OOM异…

存算一体芯片生态评估:从三星PIM到知存科技WTM2101

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 引言&#xff1a;存算一体技术的崛起与意义 在传统冯诺…

[数据结构] 栈 · Stack

一.栈 stack 1.概念 栈 : 一种特殊的线性表 , 其只允许再固定的一段进行插入和删除元素操作 进行数据插入和删除操作的一段称为 栈顶 ; 另一端称为栈底栈中的数据元素遵循 先进后出 原则(LIFO)压栈 : 栈的插入操作叫做 进栈 或 压栈 或 入栈 , 入数据在栈顶出栈 : 栈的删除…

MySQL执行过程中如何选择最佳的执行路径

本篇文章介绍一个非常核心的数据库问题。MySQL 选择最佳执行路径&#xff08;即“查询优化”&#xff09;的过程是由其查询优化器&#xff08;Query Optimizer&#xff09; 完成的。 简单来说&#xff0c;优化器的目标是&#xff1a;在多种可能的执行方案中&#xff0c;选择一个…

【设计模式】从游戏角度开始了解设计模式 --- 抽象工厂模式

永远记住&#xff0c;你的存在是有意义的&#xff0c; 你很重要&#xff0c; 你是被爱着的&#xff0c; 而且你为这个世界带来了无可取代的东西。 -- 麦克西 《男孩、鼹鼠、狐狸和马》-- 从零开始了解设计模式抽象工厂模式抽象工厂模式 今天我们一起来探究抽象工厂模式&#x…

tensorflow.js 使用场景

TensorFlow.js (简称 TF.js) 是一个利用 WebGL 和 Node.js 在浏览器和服务器端进行机器学习模型训练和部署(推理)的 JavaScript 库。它的核心价值在于将机器学习的能力带入了 Web 开发者和 JavaScript 生态的领域。 其主要应用场景可以分为以下几大类: 一、在浏览器中直接进…

详解mcp以及agen架构设计与实现

文章目录1.MCP概念2.MCP服务端主要能力3.MCP技术生态4.MCP与Function call区别5.MCP生命周期6.MCP java SDK7.MCP应用场景8.基于springAIollma阿里qianwenmcp设计私有AIAgent应用实现9.AI java项目落地技术选型10.构建AI Agent四大模块11.LLM(大模型)与MCP之间关系12.A2A、MCP、…

六级第一关——下楼梯

上目录&#xff1a; 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 一、DP的意义以及线性动规简介 在一个困难的嵌套决策链中&#xff0c;决策出最优解。 二、动态规划性质浅谈 三、子序列问题 &#xff08;一&#xff09;一个序列中的最长上升子序列&am…

【Linux基础】Linux系统配置IP详解:从入门到精通

目录 1 Linux网络配置概述 2 网卡配置文件位置和命名规则 2.1 配置文件位置 2.2 网卡命名规则 2.3 配置文件命名示例 3 网卡配置文件详解 3.1 主要参数说明 4 Linux系统配置IP步骤 4.1 DHCP动态配置 4.2 静态IP配置 5 Linux网络配置流程 5.1 网络配置流程 5.2 网卡…

C语言sprintf的高效替代方案

C语言的sprintf和snprintf将变量格式化输出到内存buffer&#xff0c;其功能强大&#xff0c;用起来很方便。但sprintf系列函数的运行效率低下&#xff0c;主要包括四方面的原因&#xff1a;格式字符串解析、变参处理、locale&#xff08;本地化&#xff09;支持和通用&#xff…

【知识堂】制造业与物流数字化全景图:系统缩写大全与专业名词速查手册

前言在制造业和物流行业的数字化转型过程中&#xff0c;我们经常会接触到大量的 系统缩写&#xff08;如 ERP、MES、WMS…&#xff09;和 专业名词&#xff08;如 AGV、BOM、LOT…&#xff09;。 这些缩写往往让刚入行的人“一头雾水”&#xff0c;即使是有经验的从业者&#x…

利用JSONCrack与cpolar提升数据可视化及跨团队协作效率

文章目录前言1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址前言 JSONCrack 是一款功能强大的开源数据可视化工具&#xff0c;专为解析和展示复杂的 JSON、XML 等结构化数据…

CANoe入门之一 CANoe功能概述

01 CANoe功能概述 CANoe软件在汽车电子领域被广泛应用。 CANoe软件的全称是CAN Open Environment&#xff0c;它是一个专业的系统级总线和ECU仿真、分析、开发、测试工具。支持ECU或总线网络开发从需求分析到系统实现的全过程&#xff0c;包括模型创建、仿真、测试、诊断及通信…

项目管理核心八项(软件篇)

2025年09月11日23:50:33&#xff1a;进来常思&#xff0c;写代码也五六年了&#xff0c;后面的路该何去何从呢&#xff1f; 项目管理核心八项一、项目管理之“建立开发人员 backup 机制”二、待补充一、项目管理之“建立开发人员 backup 机制” “建立开发人员 backup 机制” 是…