端口冲突是spring boot启动失败的常见原因,需先用netstat或lsof查pid,再taskkill/kill终止进程,或改server.port=8081、server.port=0,同时养成关闭应用而非仅关ide的习惯。

Spring Boot 启动时报错“Port 8080 was already in use”或“Unable to start web server”,基本就是端口被占用了。不用慌,按步骤查、准能定位到是谁在抢你的端口。
看日志,确认是不是端口问题
启动失败时,控制台第一眼就该盯住错误关键词:
- Port XXX is already in use
- BindException: Address already in use
- WebServerException: Unable to start embedded Tomcat
只要出现这些,基本可以锁定是端口冲突,不用再花时间查数据库配置或 YAML 语法。
查谁占了这个端口
不同系统命令不一样,但目标一致:找出 PID(进程 ID)
-
Windows:打开命令提示符或 PowerShell,运行
netstat -ano | findstr ":8080"
查到最后一列数字就是 PID;再用 tasklist | findstr "12345" 看进程名 -
macOS / Linux:终端执行
lsof -i :8080
或者
netstat -tulnp | grep 8080
注意:如果查不到结果,别急着重装系统——可能是 Hyper-V、WSL2 或 Docker Desktop 启用了端口保留机制(尤其 Windows 10/11),可运行 netsh interface ipv4 show excludedportrange protocol=tcp 查看被系统预留的端口段。
快速解决的三种方式
根据场景选最合适的路子,不硬刚:
-
临时绕开:改 application.properties:
server.port=8081(或任何其他空闲端口) -
干净收尾:杀掉占用进程(确认不是关键服务再操作):
Windows:taskkill /F /PID 12345
macOS/Linux:kill -9 12345 -
开发省心法:设成随机端口,每次启动自动挑一个空闲的:
server.port=0
启动后控制台会打印实际绑定的端口,适合多模块并行开发
预防下次再踩坑
端口冲突反复发生,往往是因为习惯性“点×关闭 IDE”却没停应用,或者本地跑着 Jenkins、Nginx、旧版 Tomcat 还没关:
- IDE 中运行 Spring Boot 时,留意右上角“Stop”按钮是否真把进程结束了
- 开发机上固定服务(如 MySQL、Redis)用非默认端口,避免和 Spring Boot 默认 8080 碰撞
- 团队协作时,约定好各服务端口范围,比如:网关 8080、用户服务 8081、订单服务 8082……











