【问题标题】:Web server failed to start. Port 8080 was already in use. Spring Boot microserviceWeb 服务器无法启动。端口 8080 已被使用。 Spring Boot 微服务
【发布时间】:2019-10-23 07:00:41
【问题描述】:

我正在尝试从 gradle 项目调用 webAPI。

我的 build.gradle 如下。

plugins {
    id 'org.springframework.boot' version '2.1.4.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    runtimeOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile 'org.springframework.boot:spring-boot-starter-webflux'
    compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'
}

如果我删除以下依赖项

compile 'org.springframework.boot:spring-boot-starter-webflux'

它有效,但如果我将其添加回来。它给出了错误

Web server failed to start. Port 8080 was already in use.

那么,我该如何解决这个问题,以便我可以使用 webclient?因为应用程序不是需要端口才能运行的 Web 应用程序。它是一种微服务。

我只想使用 Spring Boot 的 WebClient。如何在不将我的应用程序转换为 Web 应用程序的情况下使用它。

【问题讨论】:

  • 你问的是同样的问题。你的 8080 端口已经绑定了,你不能在同一个端口上运行 Spring boot。进入windows的命令提示符,输入命令netstat -a,你会知道哪个在8080端口运行。
  • 对不起,我对弹簧靴很陌生。但是为什么它需要端口。我需要它作为微服务运行。如果我不添加此依赖项,它工作正常。
  • 任何网络服务器都必须使用任何端口才能运行。这是基本概念。首先尝试使用 1.5.0 进行 spring boot,举一些来自互联网的例子。
  • @AnonymousCreator 如果没有端口,你将如何访问你的服务器?
  • 尽管这个问题是关于使用 Web 客户端而不将应用程序用作 Web 应用程序,但大多数都是因为谷歌而被引导到这里。对于他们来说,您正试图在同一个端口上运行两个应用程序。所以杀死已经运行的应用程序或在不同的端口上运行新的应用程序。您可以在springhow.com/… 找到更多详细信息。

标签: java spring-boot gradle


【解决方案1】:

如果在 Windows 上并且每次运行应用程序时都得到这个,你需要继续做:

> netstat -ano | findstr *<port used>*

  TCP    0.0.0.0:*<port used>*  0.0.0.0:0              LISTENING       *<pid>*
  TCP    [::]:*<port used>*     [::]:0                 LISTENING       *<pid>*

> taskkill /F /PID *<pid>*
SUCCESS: The process with PID *<pid>* has been terminated.

如果上面的 netstat 包含这样的内容;

TCP    [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:540yy [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:*<port used>* TIME_WAIT 0

然后您可以稍等片刻或重新配置以使用另一个端口。

我想我们可以编写一些代码来随机生成并检查应用程序运行时端口是否空闲。尽管随着它们开始用完,这将产生递减的收益。另一方面,可以添加一个资源清理代码,一旦应用程序停止,它就会执行我们上面的操作。

【讨论】:

  • 感谢分享解决方案。它真的帮助了我
【解决方案2】:

您可以通过添加以下行来更改 application.properties 中应用程序的默认端口:

server.port = 8090

【讨论】:

    【解决方案3】:

    如果您不想启动嵌入式服务器,只需在application.properties(或.yml)中设置以下属性:

    spring.main.web-application-type=none
    

    如果您的类路径包含启动 Web 服务器所需的位,Spring Boot 将自动启动它。要禁用此行为,请在 application.properties 中配置 WebApplicationType

    来源:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html


    如果您的应用程序真的一个 Web 应用程序,那么您可以使用 server.port 属性轻松更改端口(在您的应用程序的 .properties/.yaml 文件中,作为命令行参数在启动时等)。

    【讨论】:

    • 这正是我想要的。所以这只有在 webflux 存在时才开始?
    • 不仅 webflux 可以触发嵌入式服务器自动启动,正如文档所述:如果您的类路径包含启动 Web 服务器所需的位,Spring Boot 将自动启动它。其他 Spring 模块可能会添加所需的类。
    【解决方案4】:

    有时间如果可以手动kill the that port问题可以解决。

    使用 CurrPorts 软件,您可以查看计算机中正在运行的所有端口,如果需要,您可以终止该端口。

    您可以从here 下载 CurrPorts。 (下载链接在页面底部)

    ============== 或 ==============

    如果没有 CurrPorts,你也可以使用下面的方法来做到这一点。

    1. CMD 作为以管理员身份运行
    2. 输入netstat -a -o -n 并回车。现在您可以看到如下所示。端口可以​​看到:符号后的Local Address列。

    1. 选择您的端口正在运行的进程 id(not port) 并输入taskkill /F /PID &lt;process_id_here&gt; 命令并回车。

    【讨论】:

    • 我正在寻找的最准确的答案,谢谢!这个答案应该在顶部!
    【解决方案5】:

    你可以使用 npm 杀死端口

    **npx kill-port 8080**   //8080 for example
    

    要求:npm

    阅读更多:https://www.npmjs.com/package/kill-port

    【讨论】:

    • 安装 NPM pacakage manager 并尝试这个命令,它工作得非常好。但是当对代码进行更改时,有时不会自动刷新服务器,你必须终止进程并重新运行项目。
    【解决方案6】:

    另一种方法是首先检查哪些进程正在使用该特定端口,然后使用其进程 ID 将其终止:

    1. 运行lsof -i :8080 这将确定哪个进程正在侦听端口 8080。

    2. 记下进程 ID (PID),例如63262

    3. 运行kill -9 &lt;PID&gt; 例如kill -9 63262

    【讨论】:

      【解决方案7】:
      1. src/main 中创建 /resources 文件夹
      2. /resources 中创建 application.properties 文件
      3. server.port=9090 //(使用您选择的任何端口号)

      【讨论】:

        【解决方案8】:

        您可以在 application.properties 文件中设置server.port= #some-available-port number

        或在管理员模式下运行命令提示符并运行netstat -a -o -n。 查找正在使用端口 8080 的进程 ID。

        运行taskkill /F /PID #Processid 命令

        【讨论】:

          【解决方案9】:

          如果端口:8080 已在使用中发生错误:

          • 转到命令提示符 .type 命令> .netstat -ano .Enter->这将显示所有正在运行的端口检查端口8080 .type 命令> taskkill /F /PID 8080 .process 将终止。

          【讨论】:

            【解决方案10】:

            很容易我们有两种方法可以解决。 第一个是更改 application.properties 中的端口号,即

            server.port=9999 //  something like this...
            

            第二个是,首先停止可用的正在运行的服务器,然后再次重新运行您的服务器。

            我相信它有效:)

            【讨论】:

              【解决方案11】:

              如果您之前启动了 spring boot 应用程序并且在再次点击播放之前忘记停止,那么转到 windows 任务管理器 并找到 java 应用程序(类似于 “OpenJDK 平台二进制文件” 并单击结束任务。(Java 应用程序不是 Eclipse)。然后再次尝试运行。它对我有用。

              【讨论】:

                【解决方案12】:

                您尝试使用已使用的端口。

                端口用于传输层 - tcphttp 是应用层,使用传输层发送和接收请求。

                spring boot 应用程序暴露的默认端口是8080。在您的情况下,您有两种解决方案:

                • 更改应用程序的端口
                • 停止使用您要使用的端口的服务

                【讨论】:

                • 我没有使用网络应用程序。 Web 应用程序需要端口。
                • 好的,所以以下应该有助于spring.main.web-application-type=none 在您的application.properties 中,或者对于application.yml 相同但已格式化。
                【解决方案13】:

                捕获带有消息的 java.net.BindException e:地址已在使用中,并在其他可用端口上启动,并通过 2 个端口之一使用 webclient。

                try {
                            SpringApplication.run(Application.class, args);
                        } catch (org.springframework.boot.web.server.PortInUseException e) {
                //Runtime.exec("pkil")..
                //or
                SpringApplication.run(Application.class, otherargs);
                //SpringApplication.run(Application.class, new String[]{"--server.port=8444"});
                //when invoked recursively it is a port rebalancer for port usage among port pool with server as from client for startup stage via application restarts within many busy ports which are used before or without querying.
                
                }
                

                【讨论】:

                  【解决方案14】:

                  这个错误基本上意味着你的8080端口被占用了。如果您收到此错误,请转到您的项目并打开 application.properties 并添加以下行,它应该可以正常工作:

                  server.port = 8090
                  

                  【讨论】:

                    【解决方案15】:

                    您的客户端应用程序也是 Spring Boot 应用程序,这就是为什么您有两个 Spring Boot 应用程序在 8080 端口上运行的原因。 更改其中一个端口或使用主类创建一个独立的 Java 应用程序,将您的 Web 客户端放入其中并运行。 作为 http 客户端,您可以使用 Apache Http 客户端。

                    【讨论】:

                      【解决方案16】:

                      今天我在 Spring Boot 项目中工作,在我的项目中遇到了同样的错误。所以,我做了什么,我点击了 run last tool button 旁边的 stop button 并再次运行。然后,我的项目开始运行良好。

                      【讨论】:

                      • 这个春季运行最后一个工具按钮在哪里?
                      【解决方案17】:

                      你也可以在windows的搜索栏中写services.msc。然后你可以找到Apache Tomcat,然后停止这个apache。我认为它会工作。

                      【讨论】:

                        【解决方案18】:

                        这是一个简单的答案。如果您遇到此错误,请转到您的项目然后

                        src/main/resources 并打开 application.properties 文件并在此处提及

                        server.port=8045 你可以在这里输入你自己的号码而不是 8045

                        谢谢

                        【讨论】:

                          【解决方案19】:

                          重置端口 8080。

                          reset image description here

                          【讨论】:

                            【解决方案20】:

                            对此的最佳答案是始终使用“重新启动应用程序”按钮。这将停止 Web 服务器并在与以前相同的端口上重新启动整个应用程序。

                            它是红色方块和绿色播放图标组合的按钮。

                            https://i.stack.imgur.com/ICGtX.png

                            【讨论】:

                              猜你喜欢
                              • 2020-11-27
                              • 1970-01-01
                              • 1970-01-01
                              • 2022-10-04
                              • 2022-11-03
                              • 1970-01-01
                              • 2020-07-24
                              • 1970-01-01
                              • 2019-05-21
                              相关资源
                              最近更新 更多