尝试从Spring Tool Suite IDE重新部署项目时,8080端口已经出现问题

时间:2016-10-18 22:05:10

标签: java spring spring-mvc tomcat spring-boot

当我尝试在Spring Tool Suite中修改Spring项目时,我感到很奇怪。在第一次加载(部署)时一切正常,应用程序编译并在localhost:8080上运行

当我在代码中更改某些内容并尝试重新部署它时(再次运行它 - Run As Spring Boot App)我收到错误消息

  

***************************申请失败

           

说明

     

配置为侦听端口8080的Tomcat连接器失败   开始。端口可能已在使用中,或者连接器可能已在使用中   配置错误。

     

动作:

     

验证连接器的配置,识别并停止任何进程   正在侦听端口8080,或配置此应用程序以侦听   在另一个港口。

     

2016-10-19 00:01:22.615 INFO 10988 --- [主要]   ationConfigEmbeddedWebApplicationContext:关闭   org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3023df74:   启动日期[Wed Oct 19 00:01:19 CEST 2016];背景的根源   层次结构2016-10-19 00:01:22.616 INFO 10988 --- [主要]   o.s.j.e.a.AnnotationMBeanExporter:取消注册JMX暴露   关机时的豆子

如果我手动关闭该端口上的进程一切正常,但这不是重新部署Spring应用程序的正确方法。我在这里做错了吗?

我正在使用 :: Spring Boot ::(v1.4.1.RELEASE)

P.S。我知道我可以设置某种热插拔机制,在我更改代码后自动重新加载页面,但是现在我想首先解决这个问题。

感谢您提供任何帮助或信息。

26 个答案:

答案 0 :(得分:46)

即使我们在红色按钮的帮助下停止在IDE中运行进程,有时也会发生这种情况,我们继续得到同样的错误。

通过以下步骤解决了这个问题,

  1. 检查可用端口上正在运行的进程

    netstat -ao |find /i "listening"

    我们得到以下

    TCP 0.0.0.0:7981 machinename:0 LISTENING 2428 TCP 0.0.0.0:7982 machinename:0 LISTENING 2428 TCP 0.0.0.0:8080 machinename:0 LISTENING 12704 TCP 0.0.0.0:8500 machinename:0 LISTENING 2428

    即。端口号和他们正在收听的进程ID

  2. 停止在您的端口号上运行流程(在这种情况下,它是8080& Process Id是12704)

    Taskkill /F /IM 12704(注意:提及正确的流程ID)

  3. 我的问题已经解决了,希望这有帮助!

答案 1 :(得分:16)

就我而言,由于应用程序无法访问ssl的密钥库,因此发生了错误。

以root用户身份启动应用程序解决了这个问题。

答案 2 :(得分:15)

您必须停止当前进程并运行新进程。在Eclipse中,您可以按此按钮重新启动应用程序:enter image description here

答案 3 :(得分:15)

对于Mac用户(OS X El Capitan): 您需要终止运行localhost:8080的端口。 为此,您需要在终端中执行两个命令。

sudo lsof -i tcp:8080

kill -15 PID

NB! PID是第一个命令提供的数字。

第一个命令将为您提供localhost的PID:8080。 将第二个命令中的PID替换为第一个命令使您终止在localhost:8080上运行的进程的PID。

答案 4 :(得分:7)

由于嵌入式servlet容器的端口正在使用,这是典型的启动失败。

您的嵌入式tomcat容器无法启动,因为端口8080已在使用中。

只识别并停止正在侦听端口8080或配置(在 application.properties 文件中)此应用程序在另一个端口上侦听的进程。

答案 5 :(得分:7)

如果您的控制台出现任何错误,请说:“嵌入式servlet容器无法启动。端口8080已经在使用中。“然后转到application.properties文件并添加此属性”server.port = 8090“。

实际上弹簧启动的默认端口是8080,如果该端口上还有其他东西,则会出现上述错误。所以我们通过在application.properties文件中添加“server.port = 8090”来要求spring boot在其他端口上运行。

答案 6 :(得分:6)

原因是一个servlet容器已经在端口8080上运行,而您试图在端口8080上运行另一个。

  1. 检查可用端口上正在运行哪些进程。

  2. 现在尝试重新启动
    • 要重新启动:,您可以按此按钮 click here to view image
    • 要在Windows中停止: Taskkill /F /IM 6592(注意:提及正确的进程ID) click here to view image 右键单击控制台,然后选择终止/断开所有连接

转到任务管理器并结束 Java(tm)平台二进制文件 click here to view image https://www.google.com/search?q=what+is+java(tm)+platform+se+binary&oq=what+is+java(tm)+platform+se+binary&aqs=chrome..69i57.26349j1j7&sourceid=chrome&ie=UTF-8

  1. 转到 application.propertie 文件集 server.port = 0 。这将导致Spring Boot每次启动时都使用一个随机的空闲端口。

答案 7 :(得分:5)

有两种方法可以解决此问题。首先尝试选项1,如果不起作用,请尝试选项2,问题就解决了。

1)在控制台的右上角有一个红色按钮,用于停止已经在此端口上运行的弹簧启动应用程序,只需单击红色按钮即可终止。

2)如果红色按钮未激活,您需要右键单击控制台并选择终止/断开所有。希望这会有所帮助。

额外提示: - 如果要在您选择的其他端口上运行服务器,请在您的maven项目的资源文件夹中创建名为application.properties的文件,并编写server.port = 3000以在端口3000上运行您的应用程序

答案 8 :(得分:3)

  

我在这里做错了吗?

是的,你是。一个servlet容器已在端口8080上运行,并且您正尝试再次在端口8080上运行另一个。

重新启动服务器(如果STS中有按钮)或停止并启动它

答案 9 :(得分:2)

在Linux机器上,保存bash脚本并执行它。如果要释放端口8080,请在提示时输入8080

echo "Enter port number to be closed :: "
read port
sudo kill $(sudo lsof -t -i:$port)

答案 10 :(得分:2)

在浏览器中打开“localhost:8080”,查看此端口上正在运行的内容。 我做到了,我刚刚发现Oracle 10g XE在后台运行,所以我去了开始 - >服务并停止了所有oracle服务。然后我在IntelliJ上重做mvnw spring-boot:run,它就像魔法一样运行。

答案 11 :(得分:2)

在application.properties中创建一个简单的行,因为SERVER_PORT = 8090解决了这个问题。

答案 12 :(得分:2)

application.properties文件夹下创建src/main/resources文件,并将内容写为

  

server.port = 8084

运行正常。 但是每次运行之前,都需要先通过单击IDE上方的红色按钮来停止应用程序 enter image description here

或尝试

  

右键单击控制台>单击“终止/全部断开连接”

答案 13 :(得分:2)

只需单击红色按钮即可停止eclipse上的所有服务,而不是将应用程序作为Spring Boot Application重新运行 - 这对我有用。

答案 14 :(得分:1)

在Spring Boot应用程序(使用Spring Starter项目)中,我们使用Tomcat服务器在Server.xml中具有更新端口,并在application.property(insrc / main / resources)中添加此端口 该代码是 server.port = 8085

并更新Maven Project,然后运行应用程序

答案 15 :(得分:1)

转到窗口->首选项,搜索启动。

选择“启动时终止并重新启动”选项。

按“应用”。

答案 16 :(得分:1)

打印正在运行的进程的列表,然后尝试在其中找到spring。找到适当的进程ID(PID)后,停止给定的进程。

ps aux | grep spring
kill -9 INSERT_PID_HERE

之后,请尝试再次运行该应用程序。如果您杀死了正确的进程,则应该释放端口,然后可以重新启动服务器。

答案 17 :(得分:1)

该端口的后台有一些进程,可能由于多种原因导致此问题,但是如果结束与8080或Spring相关的进程,则可以轻松解决。

如果您使用的是Linux,请执行以下步骤来结束进程:

  1. 打开终端并输入命令“ htop”
  2. 按F3键(它将允许您搜索)
  3. 如果在尝试“ spring”之后8080上没有结果,请键入“ 8080”
  4. 然后按F9(杀死)并按“ 9”(SIGKILL)

这将杀死保留在8080端口上的进程,并让您运行应用程序。

答案 18 :(得分:0)

无需每次在开发时就手动启动应用程序以使用“ spring-boot-devtool” maven依赖项来实现更改。

  

自动重启:   要使用该模块,您只需要将其作为依赖项添加到您的Maven POM中:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

当包含spring-boot-devtools模块时,任何对classpath文件的更改都会自动触发应用程序重新启动。我们采取了一些技巧来尝试保持快速重启,因此对于许多微服务风格的应用程序,此技术可能足够好。

答案 19 :(得分:0)

如果您使用的是Linux系统,请使用以下命令。

fuser -k some_port_number/tcp-将终止该进程。

样品:-

fuser -k 8080 / tcp

答案 20 :(得分:0)

一个可行的简单解决方案是: -由于停止按钮不再可见,因此重新启动IDE。

答案 21 :(得分:0)

您可以使用list open file命令,然后按如下所示终止进程。

sudo lsof -t -i tcp:8181 | xargs kill -9

sudo lsof -i tcp:8181

kill -9 PID

答案 22 :(得分:0)

MAC 用户的一行命令:

kill `lsof -i -n -P | grep TCP | grep 8080 | tr -s " " "\n" | sed -n 2p`

答案 23 :(得分:0)

如果您在重新部署时遇到问题,最简单的方法是不要让端口被占用。即关闭你的 spring 应用程序的上下文,这样 PORT 就会被关闭。

您可以通过以下方式做到这一点:

//open context.
ConfigurableApplicationContext appContext = SpringApplication.run(Application.class, args);
...
//in the end, close it
appContext.close();

另一种方法是:在 try() 块中打开上下文

try(ConfigurableApplicationContext appContext =
 SpringApplication.run(Application.class, args))
{
// your code here
}

try() 将负责关闭上下文,因此 PORT,即使代码在某处中断,通过 调用 AutoCloseable

参考:try-with-resources

答案 24 :(得分:0)

首先从 CMD 运行:

netstat -aon |find /i "listening" |find   "8080"

然后获取PID号并运行以下命令: 让它199,

taskkill /F /PID 199

答案 25 :(得分:-1)

from itertools import islice

spam = {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5'}
spam1, spam2 = [dict(islice(spam.items(), i, None, 2)) for i in (None, 1)]
print(spam1, spam2)  # {'a': '1', 'c': '3', 'e': '5'} {'b': '2', 'd': '4'}

要如上所述更改端口号。右键单击该项目。转到运行方式->运行配置---->选择项目(或),在搜索字段中输入项目名称,然后选择--->转到环境,并提供所需的变量名(SERVER_PORT)和变量号(端口数字)8213。