昨天下午,实习生小刘一脸懵地跑过来:
"小马哥,我 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% 的人用的方法,简单粗暴。
步骤:
- 打开你的
application.properties
(或application.yml
) - 添加一行:
properties 写法:
server.port=8081
yml 写法:
server:
port: 8081
- 重启项目 → 访问
http://localhost:8081
✅ 优点 :一劳永逸,团队共享配置
❌ 缺点:如果多人协作,可能又冲突(比如同事也改 8081)
方法 2:启动时传参数(临时改,超实用!)
适合临时调试,不想改代码。
在 IDEA 中:
-
点击右上角启动配置(Run Configuration)
-
在
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 种方法,你就能:
- ✅ 快速恢复开发
- ✅ 同时跑多个服务
- ✅ 写出更健壮的测试代码
记住:
改端口不是妥协,而是对环境的尊重。
互动时间 :
你用过哪种改端口的方法?有没有因为端口冲突闹过笑话?