Web 服务器无法启动。端口 8080 已被使用。 Spring Boot 微服务
Posted
技术标签:
【中文标题】Web 服务器无法启动。端口 8080 已被使用。 Spring Boot 微服务【英文标题】:Web server failed to start. Port 8080 was already in use. Spring Boot microservice 【发布时间】: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/… 找到更多详细信息。 【参考方案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,你也可以使用下面的方法来做到这一点。
-
CMD 作为以管理员身份运行
输入
netstat -a -o -n
并回车。现在您可以看到如下所示。端口可以看到:
符号后的Local Address列。
-
选择您的端口正在运行的进程 id
(not port)
并输入taskkill /F /PID <process_id_here>
命令并回车。
【讨论】:
我正在寻找的最准确的答案,谢谢!这个答案应该在顶部!【参考方案5】:你可以使用 npm 杀死端口
**npx kill-port 8080** //8080 for example
要求:npm
阅读更多:https://www.npmjs.com/package/kill-port
【讨论】:
安装 NPM pacakage manager 并尝试这个命令,它工作得非常好。但是当对代码进行更改时,有时不会自动刷新服务器,你必须终止进程并重新运行项目。 【参考方案6】:另一种方法是首先检查哪些进程正在使用该特定端口,然后使用其进程 ID 将其终止:
运行lsof -i :8080
这将确定哪个进程正在侦听端口 8080。
记下进程 ID (PID),例如63262
运行kill -9 <PID>
例如kill -9 63262
【讨论】:
【参考方案7】:-
在 src/main 中创建 /resources 文件夹
在 /resources 中创建 application.properties 文件
写
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】:您尝试使用已使用的端口。
端口用于传输层 - tcp
、http
是应用层,使用传输层发送和接收请求。
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
【讨论】:
以上是关于Web 服务器无法启动。端口 8080 已被使用。 Spring Boot 微服务的主要内容,如果未能解决你的问题,请参考以下文章
Grails 项目运行错误 - 服务器无法为端口 8080 启动:地址已在使用中:JVM_Bind
Xampp 1.8.1:Apache 无法在端口 8080 中启动,该端口正被 tomcat 7 使用