You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot提示8080端口被占用,但Windows CMD未查到对应进程

问题原因及解决方法

原因分析

  • 端口TIME_WAIT状态锁定:Windows下进程退出后,端口会进入TIME_WAIT状态(默认保留240秒),用于处理残留的网络数据包。此时netstat -ano | findstr 8080查不到占用进程,但端口实际被系统保留,无法被新进程绑定。
  • IntelliJ残留进程未终止:项目启动失败后,IntelliJ的进程管理机制可能未彻底终止JVM进程,导致进程处于僵尸状态,虽无正常服务但仍占用端口资源。
  • Spring Boot端口绑定资源未释放:启动时绑定端口失败,Spring Boot可能未正确回收已申请的端口资源,造成端口“虚占”。

无需重启的解决方法

1. 强制释放TIME_WAIT端口(管理员CMD执行)

修改系统TCP参数,缩短端口保留时间并启用复用:

netsh int ipv4 set tcp global tcp_fin_timeout=30
netsh int ipv4 set tcp global reuseaddr=enabled

执行后等待30秒左右即可复用8080端口。

2. 手动清理残留Java进程

打开任务管理器,筛选出所有java.exe或javaw.exe进程,结束与你的Spring Boot项目相关的进程(若不确定可全部结束),之后即可重新启动项目。

3. 配置Spring Boot端口复用

在application.properties中添加端口复用配置:

server.port=8080
# 启用Tomcat端口复用
server.tomcat.socket.so-reuseaddr=true

或通过启动类代码设置:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(connector -> 
            connector.setProperty("socket.soReuseAddress", "true")
        );
        new SpringApplicationBuilder(MyApplication.class)
                .serverFactory(factory)
                .run(args);
    }
}

4. 调整IntelliJ进程终止设置

  • 打开File > Settings > Build, Execution, Deployment > Debugger,将On frame deactivation设为Terminate,确保窗口切换或启动失败时自动终止残留进程。
  • 进入Run > Edit Configurations,勾选Single instance only,避免多实例同时抢占端口。

内容的提问来源于stack exchange,提问作者gong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:01:06