Web服务器无法启动。端口8080已被使用。春季靴

时间:2019-06-07 19:01:39

标签: java spring-boot gradle

我正在尝试从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应用程序的情况下使用它。

17 个答案:

答案 0 :(得分:15)

如果在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

然后,您可以等待一会儿或重新配置为使用其他端口。

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

答案 1 :(得分:2)

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

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

运行 taskkill /F /PID #Processid 命令

答案 2 :(得分:1)

如果您不想启动嵌入式服务器,只需在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

答案 3 :(得分:1)

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

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

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

  3. 运行 kill -9 <PID> 例如kill -9 63262

答案 4 :(得分:1)

如果端口:8080已经在使用中出现错误:

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

答案 5 :(得分:1)

可以使用 npm 杀死端口

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

要求:npm

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

答案 6 :(得分:1)

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

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

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

我确定它有效:)

答案 7 :(得分:1)

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

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

Spring Boot应用程序公开的默认端口为8080。在您的情况下,您有两种解决方案:

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

答案 8 :(得分:0)

今天,我在Spring Boot项目中工作,但在项目中遇到了相同的错误。因此,我做了什么,我点击了运行最后一个工具按钮旁边的停止按钮,然后再次运行。然后,我的项目开始运作良好。

答案 9 :(得分:0)

你也可以在windows的搜索栏中写services.msc。然后你可以找到Apache Tomcat,然后停止这个apache。我认为它会奏效。Find Apache TomCat and Stop it

答案 10 :(得分:0)

    src / main
  1. 创建 / resources 文件夹 在 /资源
  2. 创建 application.properties 文件
  3. server.port=9090 //(使用您选择的任何端口号)

答案 11 :(得分:0)

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

server.port = 8090

答案 12 :(得分:0)

只需自定义您的springboot应用即可在任何端口启动: https://www.javadevjournal.com/spring-boot/change-the-default-port-in-spring-boot/

答案 13 :(得分:0)

捕获带有消息的 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 :(得分:0)

如果您之前启动了 spring boot 应用程序,但在再次点击播放之前忘记停止,那么转到 windows 任务管理器 并找到 Java 应用程序(类似于 “OpenJDK Platform binary”< /em> 并单击“结束任务”。(Java 应用程序不是 eclipse)。然后再次尝试运行。它对我有用。

答案 15 :(得分:0)

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

答案 16 :(得分:-3)

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

这是结合了红色正方形和绿色播放图标的按钮。

this answer