bigywater.tech
Spring · 176

Port 8080 was already in use:报错原文,以及同一个端口两个实例都能启动成功的情形

Port 8080 was already in use 的报错原文是什么,Boot 4 变了吗?同一个端口、不同绑定地址时第二个实例会不会启动成功?这篇用两个真实实例逐个试。

PortInUseException
Boot 4.0.8 与 3.5.16 的报错文字一字不差,退出码都是 1
两个都起来
在本机 macOS 上,一个实例监听 127.0.0.1、另一个监听 0.0.0.0(或反过来),第二个实例也启动成功,没有报错
server.port=0
由系统分配空闲端口,实际端口从 local.server.port 读

4.0.8

实测 · 本机执行输出
  Boot 4.0.8(退出码 1,用时 0.8s)
    启动失败 org.springframework.context.ApplicationContextException ← org.springframework.boot.web.server.PortInUseException
    Description:
    Web server failed to start. Port <端口> was already in use.
    Action:
    Identify and stop the process that's listening on port <端口> or configure this application to listen on another port.

PortInUseException,Description 与 Action 的文字。

3.5.16

实测 · 本机执行输出
  Boot 3.5.16(退出码 1,用时 1.0s)
    启动失败 org.springframework.context.ApplicationContextException ← org.springframework.boot.web.server.PortInUseException
    Description:
    Web server failed to start. Port <端口> was already in use.
    Action:
    Identify and stop the process that's listening on port <端口> or configure this application to listen on another port.

与 4.0.8 一致。

127.0.0.1 与 0.0.0.0

实测 · 本机执行输出
  Boot 4.0.8:第二个实例启动成功,两个实例同时在运行
    向 127.0.0.1:端口 连续请求 6 次,响应来自:第一个 第一个 第一个 第一个 第一个 第一个

两个实例同时运行,请求去向取决于绑定地址。

反过来

实测 · 本机执行输出
  Boot 4.0.8:第二个实例启动成功,两个实例同时在运行
    向 127.0.0.1:端口 连续请求 6 次,响应来自:第一个 第一个 第一个 第一个 第一个 第一个

第二个设 127.0.0.1 也能启动,6 次请求全去了第一个。

随机端口

实测 · 本机执行输出
  server.port=0(随机端口)(退出码 0,用时 0.8s)
    启动成功,local.server.port 是一个正数

server.port=0。

分步演示

PortInUse
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 arm64 / OpenJDK 21.0.12(Homebrew) / Spring Boot 4.0.8(Spring Framework 7.0.9、Tomcat 11.0.24) / Spring Cloud 2025.1.3;用 javac 编译、java 直接运行,依赖由 Maven 从 Maven Central 解析;数字每次运行会有小幅抖动(Spring Boot 4.0.8 与 3.5.16;「别的进程」用同一个程序先起一个实例占端口;logback 根日志器接 ERROR 级别的控制台输出以便 FailureAnalyzer 的报告打出来;实例是否响应由 GET / 返回进程号判断)
    • 没有验证:Linux、Windows 上相同绑定组合的结果(只在 macOS 上做了);IPv6 地址(::、::1)的组合;端口被其它非 Java 进程占用时的报错是否相同(这里占端口的也是 Spring Boot 实例);management.server.port 冲突的报错;Docker 端口映射冲突;Tomcat 之外的容器(Jetty 等)的报错;SO_REUSEPORT
    京ICP备2026067502号-1京公网安备11010502063487号