繁体   English   中英

Eclipse 中的端口已在使用 8080 错误提示,但它在运行时在 web 浏览器中的端口 8080 上工作

[英]Port already in use 8080 error prompts in Eclipse but it does work on port 8080 in web browser when running

用于运行 Spring MVC 项目是 Eclipse 版本:2020-03 (4.15.0) 使用 Tomcat 8.5。 当我运行该项目时,它会在控制台中显示“端口已在使用中的错误”,但是当我在浏览器 localhost:8080/ 上运行时它可以工作。 但是当我查看 Eclipse 中的“服务器”部分时,它停止了,但我认为它是由我包含在 pom.Z0F635D0E0F3874FFF8B581C132E6CC7A 中的 Spring 引导配置管理的。 并且服务器已经在端口 8080 中启动,如果我错了,请纠正我。

我很困惑 Eclipse 项目中的“服务器”部分到底显示了什么,如果可能的话,我们如何将端口从 Eclipse 更改为其他端口?

有人可以通过解释后台实际发生的事情来帮助我理解这一点吗? bs:当我添加新服务器时,在工作区之外创建了新的服务器文件夹。 端口已在使用错误,配置设置为 8080 服务器已停止,.properties 文件中未添加端口 但它适用于端口 8080

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

请按照以下步骤操作:

  1. Go 运行配置
  2. 创建新的运行配置
  3. Go 到 arguments 选项卡
  4. Go 到 vmArguments
  5. 输入: -Dserver.port=8081
  6. 单击应用并关闭。

除了8081 ,您还可以输入任何其他端口号。

由于错误消息,手动转到 localhost:8080 有效。 另一个进程,可能是 Tomcat 的另一个副本,已经在该端口上运行并监听——它正在向浏览器发送响应。 您在第一张图片中显示的服务器编辑器的右侧有可见的端口部分。 您可以在此处更改从 Eclipse 启动的实例的端口号。

有一个挂起的 java 进程正在侦听该端口。

通过端口找到进程并杀死它。

对于 linux 你可以使用fuser -k 8080/tcp

对于 windows netstat -ano | findstr:PORT_NUMBER netstat -ano | findstr:PORT_NUMBER获取 PID 然后将其杀死

除此之外,您可以使用JavaVisualVM跟踪您机器上运行的所有 java 应用程序

在此处输入图像描述

如果有人对这个问题投赞成票,我会很高兴,我觉得这是一个有效的问题,因为在将相关依赖项加载到 class 路径时,可能会出现许多可用的配置选项,例如嵌入式服务器与独立服务器、spring 引导行为。

如果有人投票支持这个问题,我会很高兴,所以我会继续更新我的个人资料。

谢谢。

好吧,我在花时间研究和跟踪错误后找到了答案。感谢所有为这个问题做出贡献的人,这就是让我花更多时间来理解问题的原因。 因为实际上我是从头开始创建 spring 项目的初学者。 请多多包涵。

其实我想指出这些。

1) This project is initialized from https://start.spring.io/ , so that means it is spring boot based project, not a plain spring-MVC project(with those.XML files).

2) 我一直在嵌入式 Tomcat 服务器上运行它,我在运行应用程序时应该遵循该实践。 一种方法是./mvnw spring-boot:run ,另一种方法是通过./mvnw clean package创建一个.JAR文件并运行它。

当我通过 Eclipse 运行应用程序时,我通过附加另一个 Tomcat(独立)服务器犯了错误。 所以这是错误的。

在这里您现在可以看到 Eclipse 的“服务器”部分下没有服务器显示,但是当我运行应用程序时,它会成功运行(参见控制台)并且如果我想通过传递更改可能的端口,也可以监听默认端口 8080作为论据。 -Dserver.port=8081或你们建议的所有其他选项。 没有任何独立服务器 但应用程序运行在嵌入式服务器之上 默认端口:8080

任何改进这个高度赞赏的建议。 如果您对我的发现感觉良好,请投票。

参考:

  1. 什么是弹簧启动
  2. 服务网络内容

暂无
暂无

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

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