【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 optionsProgram 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 种方法,你就能:

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

记住:

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


互动时间

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

相关推荐
碳基硅坊4 小时前
Spring AI:把大模型接进 Spring 应用
java·人工智能·spring ai
黄毛火烧雪下4 小时前
Java 核心知识点总结(一)
java·开发语言
凡人叶枫5 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
技术小结-李爽5 小时前
【工具】Maven的下载、安装、使用
java·maven
AI帮小忙5 小时前
Debian系linux操作系统里安装OpenClaw
linux·运维·debian
极创信息5 小时前
Linux挖矿病毒深度清理实战教程,从进程隐藏、Rootkit驻留到彻底根除
java·大数据·linux·运维·安全·tomcat·健康医疗
努力成为AK大王5 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
云烟成雨TD5 小时前
Agent Scope Java 2.x 系列【10】技能(Skill)
java·人工智能·agent
摇滚侠5 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea
键盘歌唱家6 小时前
Spring AI 入门分享:它和“直接调 API“到底差在哪
java·人工智能·spring