繁体   English   中英

Spring Boot:配置监听8080端口的Tomcat连接器启动失败

[英]Spring Boot: The Tomcat connector configured to listen on port 8080 failed to start

我正在运行一个 Spring Boot 程序,起初一切都很好。 但是在我按ctrl + c并停止程序后,我重新启动程序并遇到以下错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 8080, or configure this application to listen on another port.

我的程序是一个 jar 文件,所以我用java -jar myJar启动它,然后按ctrl + c停止它。

一开始我以为是因为使用了8080端口。 但是当我尝试以下命令时,我发现端口 8080 上没有任何运行,

lsof -i:8080 # shows nothing
sudo lsof -i tcp:8000 # shows nothing

所以我认为没有进程在端口 8080 上运行,但为什么 spring 给我这个错误?

我尝试了另一个端口 8081 并再次遇到同样的问题。 但是当我使用server.port=0 ,它可以工作。 任何人都可以就该怎么做提出一些建议吗? 非常感谢!!

我在 web 服务器访问繁忙时遇到了类似的问题,所以你的服务器套接字可能有TIME_WAIT状态,在这种情况下,spring boot 中的 tomcat-embeded-server 无法绑定这个端口,因为SO_REUSEADDR没有设置为 true 在此处输入图片说明

所以我的解决方案是在spring boot中使用Jetty ,你可以改变你的pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

当您在 tomcat 运行时按ctrl+c会发生这种情况。 这将使端口处于等待状态。 首先使用以下命令释放状态: fuser 8080 -k然后再次运行程序。

我在使用 ServerSocketIO 时遇到了类似的问题。 我的代码中的问题是,在 server.start() 之后使用了 Thread.sleep。 因此,在理想情况下,如果您只注入 ServerSocketIO bean 并在其上调用 start 方法,Tomcat 服务器将为传入的请求提供服务。 尽管在应用程序崩溃或其他情况下需要优雅地处理套接字关闭的处理...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM