【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!

昨天下午,实习生小刘一脸懵地跑过来:

"小马哥,我 Spring Boot 项目启动不了!报错说端口被占用,但我明明没开其他服务啊!"

我瞥了一眼他的屏幕,笑了:"兄弟,你是不是刚关掉一个项目,立马又启动另一个?或者开了两个 IDEA 窗口?"

他点点头。

"那太正常了!今天我就教你 3 种改端口的方法,连第 3 种'隐藏技巧'都告诉你------以后再也不怕端口冲突!"


🔥 一、先看错误长啥样(附模拟日志)

这是你最可能看到的报错(发布时请替换为你的真实截图):

复制代码
***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

📌 关键句 :
Port 8080 was already in use

翻译:8080 端口已经被占用了!

🤔 二、为什么端口会被占用?

别以为只有你开了服务!这些情况都会"偷偷"占着 8080:

  • ✅ 你刚关掉的 Spring Boot 项目,进程还没完全退出(Windows 尤其常见)
  • ✅ 你开了两个 IDEA,都在跑同一个项目
  • ✅ 你本地装了 Tomcat、Nginx、Docker 容器,也在用 8080
  • ✅ 你同事远程连你机器调试(别笑,真发生过!)

💡 小知识 :

Spring Boot 默认内嵌 Tomcat,启动时会绑定 8080 端口。

如果这个端口被别的程序"占着茅坑不拉屎",启动就失败!

🛠️ 三、3 种修改端口号的方法(从简单到高级)

方法 1:改配置文件(最常用!)

这是90% 的人用的方法,简单粗暴。

步骤:
  1. 打开你的 application.properties(或 application.yml)
  2. 添加一行:

properties 写法:

复制代码
server.port=8081

yml 写法:

复制代码
server:
  port: 8081
  1. 重启项目 → 访问 http://localhost:8081

✅ 优点 :一劳永逸,团队共享配置

❌ 缺点:如果多人协作,可能又冲突(比如同事也改 8081)

方法 2:启动时传参数(临时改,超实用!)

适合临时调试,不想改代码。

在 IDEA 中:
  1. 点击右上角启动配置(Run Configuration)

  2. 在 VM options 或 Program arguments 里加:

    --server.port=8082

在命令行中:
复制代码
# Maven
./mvnw spring-boot:run --server.port=8082

# 或直接运行 jar
java -jar demo.jar --server.port=8082

✅ 优点 :不用改代码,随时换端口

✅ 场景:本地同时跑"开发版"和"测试版"项目

方法 3:随机端口(隐藏技巧!90% 的人不知道)

"啥?还能随机?"

没错!Spring Boot 支持启动时自动分配一个空闲端口!

怎么做?

在 application.properties 中写:

复制代码
server.port=0
效果:
  • 项目启动后,会自动分配一个可用端口(比如 53217)

  • 控制台会打印:

    复制代码
    Tomcat started on port(s): 53217 (http)
但问题来了:怎么知道分配的是哪个端口?

✅ 解决方案 :配合 @LocalServerPort 注解获取实际端口!

复制代码
@RestController
public class TestController {

    @Value("${local.server.port}")
    private int port;

    @GetMapping("/port")
    public String getPort() {
        return "当前服务运行在端口: " + port;
    }
}

💡 适用场景:

  • 单元测试(Testcontainers + 随机端口)
  • 本地快速启动多个实例做测试
  • 避免团队端口冲突的终极方案!

🔍 四、Bonus:如何查谁占了 8080 端口?(附命令)

有时候你想干掉占用者,而不是改端口。试试这些命令:

Windows:

复制代码
netstat -ano | findstr :8080

→ 找到 PID,再用任务管理器结束进程,或:

复制代码
taskkill /PID <PID> /F

Mac / Linux:

复制代码
lsof -i :8080

→ 找到 PID,然后:

复制代码
kill -9 <PID>

💬 五、写在最后

端口被占用,不是 Bug,而是开发日常 。

掌握这 3 种方法,你就能:

  • ✅ 快速恢复开发
  • ✅ 同时跑多个服务
  • ✅ 写出更健壮的测试代码

记住:

改端口不是妥协,而是对环境的尊重。


互动时间 :

你用过哪种改端口的方法?有没有因为端口冲突闹过笑话?

相关推荐
郑州光合科技余经理1 小时前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
木头科技1 小时前
【AI 工程化第八篇】Spring AI 多模型路由实战:DeepSeek、通义、Kimi、OpenAI 如何统一接入和自动切换
java·人工智能·spring
深盾科技_Virbox2 小时前
云端与本地并行交付,软件许可管理如何实现统一运营?
java·大数据·开发语言·安全
xiaoqiMikko2 小时前
Linux 实战(三):服务起不来、定时任务不执行 —— CentOS 7 / Rocky 9 / Ubuntu 24.04 实测差异
linux·centos
thefool1122662 小时前
多线程 3
java
CoderYanger2 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
Hello_Pyhx2 小时前
Ventoy:Linux制盘与排障
linux·运维·服务器
马剑威(威哥爱编程)2 小时前
【AI全栈后端12-11】Spring Boot 把 AI 接口真正上线扛量:限流 / 降级 / 可观测
人工智能·spring boot·后端
liangbo72 小时前
01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清
java
xuxigifxfh2 小时前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考