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
英文地址,請注明出處:http://en.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 機制” 是…