我正在尝试从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应用程序的情况下使用它。
答案 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 杀死它:
运行lsof -i :8080
这将识别哪个进程正在侦听端口 8080。
记下进程 ID (PID),例如63262
运行 kill -9 <PID>
例如kill -9 63262
答案 4 :(得分:1)
如果端口:8080已经在使用中出现错误:
答案 5 :(得分:1)
可以使用 npm 杀死端口
**npx kill-port 8080** //8080 for example
要求:npm
答案 6 :(得分:1)
很容易我们有两种方法可以解决。 第一个是更改application.properties 中的端口号,即
server.port=9999 // something like this...
第二个是,首先停止可用的正在运行的服务器,然后再次重新运行您的服务器。
我确定它有效:)
答案 7 :(得分:1)
您尝试使用已使用的端口。
端口在传输层上使用-tcp
,http
是应用层,并使用传输层发送和接收请求。
Spring Boot应用程序公开的默认端口为8080
。在您的情况下,您有两种解决方案:
答案 8 :(得分:0)
今天,我在Spring Boot项目中工作,但在项目中遇到了相同的错误。因此,我做了什么,我点击了运行最后一个工具按钮旁边的停止按钮,然后再次运行。然后,我的项目开始运作良好。
答案 9 :(得分:0)
答案 10 :(得分:0)
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)