摘要: 在启动 SpringBoot 项目时,控制台报错 Web server failed to start. Port 8080 was already in use.。这通常是因为上一次项目没有正常关闭,或者 8080 端口被其他软件(如 Oracle, Jenkins 等)占用了。本文提供 3 种解决方法,适用于 Windows、Mac 和 Linux。
1. 报错现象
当你点击运行 SpringBoot 的启动类 Application.java 时,控制台出现如下错误堆栈:
code Java
downloadcontent_copy
expand_less
***************************
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.
2. 解决方法一:找出并杀死占用端口的进程(推荐)
这是最彻底的解决方法。我们需要找到是哪个程序占用了 8080 端口,然后干掉它。
🟢 Windows 系统解决方案
第一步:打开 CMD 窗口
按下 Win + R,输入 cmd,回车。
第二步:查找占用端口的 PID
输入以下命令:
code Bash
downloadcontent_copy
expand_less
netstat -ano | findstr 8080
你会看到类似这样的输出:
code Code
downloadcontent_copy
expand_less
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 12345
TCP [::]:8080 [::]:0 LISTENING 12345
注意最右边的数字 12345,这就是占用端口的 进程 ID (PID) 。
第三步:杀死进程
输入以下命令(将 12345 换成你刚才查到的实际 PID):
code Bash
downloadcontent_copy
expand_less
taskkill /F /PID 12345
提示 成功: 已终止 PID 为 12345 的进程 后,重新启动你的 SpringBoot 项目即可!
🟢 Mac / Linux 系统解决方案
第一步:打开终端 Terminal
第二步:查找并杀死进程
有两种方式:
-
方式 A(分步执行):
code Bash
downloadcontent_copy
expand_less
# 1. 查找 PID lsof -i :8080 # 输出示例: # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME # java 9876 root 45u IPv6 0x12345678 0t0 TCP *:http-alt (LISTEN) # 2. 杀死进程 (将 9876 换成你的 PID) kill -9 9876 -
方式 B(一行命令搞定):
code Bash
downloadcontent_copy
expand_less
# 直接根据端口号杀进程 fuser -k 8080/tcp
3. 解决方法二:修改 SpringBoot 项目端口
如果你不想杀进程(比如 8080 被其他重要服务占用了),可以修改当前项目的启动端口。
情况 A:使用的是 application.properties
在 src/main/resources/application.properties 文件中添加:
code Properties
downloadcontent_copy
expand_less
# 将端口修改为 8081
server.port=8081
情况 B:使用的是 application.yml
在 src/main/resources/application.yml 文件中修改:
code Yaml
downloadcontent_copy
expand_less
server:
port: 8081
4. 解决方法三:临时救急(启动参数覆盖)
如果你只是想临时跑一下测试,不想改配置文件,也不想查端口,可以在启动配置(Program arguments)中添加参数:
code Bash
downloadcontent_copy
expand_less
--server.port=8082
或者在打包运行 jar 包时:
code Bash
downloadcontent_copy
expand_less
java -jar demo.jar --server.port=8082
出现 Port 8080 was already in use 是 Java 开发中最常见的问题之一。
- 最推荐: 使用 方法一(杀死僵尸进程),保持代码配置的整洁。
- 最快: 使用 方法二(改端口),如果你确实需要同时运行多个服务。
如果这篇文章帮到了你,请点赞 + 收藏!有问题欢迎在评论区留言。