8080端口在尝试从 SpringToolSuiteIDE 重新部署项目时已经出现问题

当我试图在我的 Spring 工具套件中修改 Spring 项目时,我感到很奇怪。在第一次加载(部署)时一切正常,应用程序在 localhost: 8080上编译和运行

当我更改代码内部的某些内容并试图重新部署它时(再次运行它——以 Spring 启动应用程序的方式运行) ,我会收到错误消息

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


描述:

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

行动:

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

2016-10-1900:01:22.615 INFO 10988——-[ main ] 关闭 内嵌.AnnotationConfigEmbeddedWebApplicationContext@3023df74: 启动日期[ Wed Oct 1900:01:19 CEST 2016] ; 根上下文 等级制度2016-10-1900:01:22.616 INFO 10988——-[ main ] 注释 MBeanExporter: 注销暴露的 JMX 豆子关闭

如果我手动关闭该端口上的进程,一切都会再次正常工作,但这不可能是重新部署 Spring 应用程序的正确方式。我做错什么了吗?

我用的是 : : Spring Boot: : (v1.4.1. 释放)

另外,我知道我可以设置某种热交换机制,以便在我更改代码后自动重新加载页面,但是现在我想先解决这个问题。

谢谢你的帮助和信息。

299938 次浏览

我做错什么了吗?

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

要么重新启动服务器(如果在 STS 中有这个按钮) ,要么停止并启动它

这是一个典型的启动失败,原因是 嵌入式 servlet 容器的端口正在使用。

嵌入的 tomcat 容器启动失败,因为已经在使用端口8080。

只需识别并停止监听端口8080的进程,或者配置(在 应用性能文件中)此应用程序监听另一个端口。

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

在我的示例中,错误发生在应用程序无法访问 ssl 的密钥存储库时。

以 root 用户的身份启动应用程序修复了这个问题。

只需点击红色按钮停止所有服务在 Eclipse 比重新运行应用程序作为春天启动应用程序-这对我来说工作。

即使在 红色按钮的帮助下停止在 IDE 中运行进程,有时也会出现同样的错误。

解决办法如下:

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

    netstat -ao |find /i "listening"

    我们被跟踪了

    TCP 0.0.0.0:7981 machinename: 0 LISTENING 2428 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:7982 machiname: 0 LISTENING 2428 TCP 0.0.0.0:8080 machine name: 0 LISTENING 12704 TCP 0.0.0.0:8500机器名: 0 LISTENING 2428

    比如端口号和他们正在监听的 进程 ID

  2. 停止在您的端口号上运行的进程(在本例中为8080 & ProcessId 为12704)

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

要了解更多信息,请点击这些链接 Link1Link2

我的问题解决了,希望这有帮助!

如果您在控制台上出现任何错误,您可以说: “嵌入式 servlet 容器启动失败。端口8080已经投入使用。”然后转到 application.properties 文件并添加这个属性“ server.port = 8090”。

实际上,弹簧启动的默认端口是8080,如果在该端口上有其他内容,就会发生上述错误。因此,我们通过在 application.properties 文件中添加“ server.port = 8090”,要求 Spring boot 在其他端口上运行。

在浏览器上打开“ localhost: 8080”,看看这个端口上运行着什么。 我这样做了,我发现 Oracle 10g XE 在后台运行,所以我启动了 start-> Services 并停止了所有 Oracle 服务。然后我在 IntelliJ 上重做 mvnw spring-boot:run,它就像魔法一样运行。

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

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

2)如果红色按钮没有被激活,你需要在控制台上右键单击并选择终止/断开所有连接。希望这个能帮上忙。

附加提示:-如果您想在自己选择的不同端口上运行服务器,请在 maven 项目的资源文件夹中创建一个名为 application.properties 的文件,并编写 server.port = 3000以在端口3000上运行应用程序

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

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

对于 Mac 用户(OS X El Capitan) :

您需要关闭运行 localhost:8080的端口。
为此,您需要在终端中执行两个命令: N

sudo lsof -i tcp:8080


kill -15 PID

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

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

Hi 在 application.properties 中创建一个简单的代码行 SERVER _ PORT = 8090解决了这个问题。

在 Spring 引导应用程序(使用 Spring 启动项目)中,我们使用 Tomcat 服务器在 Server.xml 中有更新端口,并在 Application.property (insrc/main/resources)中添加这个端口 密码是 Port = 8085

然后更新 MavenProject 并运行应用程序

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

Port = 8084

它跑得很好。 但是每次运行之前都需要先单击 IDE 上的红色按钮来停止应用程序 enter image description here

或者尝试

右键单击控制台 > 单击终止/断开所有连接

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

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

      • 视窗:

      • Image01

      或者

      • netstat -ano | find "8080"(注意: 8080端口无法启动) Image02
    1. 现在尝试重新启动 或者停止应用程序。

      • 重新启动: 你可以按下这个按钮

    Image03

    • 停在窗前:

    Taskkill/F/IM 6592 注意: 请注意正确的进程 ID

    Image04

    右键单击控制台并选择 终止/断开所有连接

    • 转到 Task Manager结束 Java (tm)平台 se 二进制

    click here to view image

    什么是 java (tm)平台 se 二进制(在谷歌搜索

另一个选择是 :

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

在该端口的后台存在一些进程,有几个原因可能导致这个问题,但是如果您结束了与8080或 Spring 相关的进程,就可以很容易地解决这个问题。

如果你正在使用 Linux,下面是如何结束进程的步骤:

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

这将终止8080端口上的进程,并让您运行应用程序。

不需要在每次开发时手动启动应用程序来实现更改,使用“ spring-boot-devtool”maven 依赖关系。

自动重启: 要使用这个模块,只需将它作为一个依赖项添加到 MavenPOM 中:

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

当您包含 spring-boot-devtools 模块时,任何类路径文件的更改都将自动触发应用程序的重新启动。我们做了一些技巧来尝试并保持快速重启,因此对于许多微服务样式的应用程序来说,这种技术可能已经足够好了。

如果您正在使用 linux 系统,请使用以下命令。

fuser -k some_port_number/tcp-这将扼杀这个过程。

样本:-

Fuser-k 8080/tcp

第二个选项: 将 tomcat 配置为使用新端口

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

ps aux | grep spring
kill -9 INSERT_PID_HERE

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

对我来说,一个有效的简单解决方案是: - 重新启动 IDE,因为停止按钮不再可见。

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

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

按申请。

您可以使用 list open file 命令,然后像下面这样终止进程。

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

或者

sudo lsof -i tcp:8181


kill -9 PID

MAC 用户的一行命令:

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

如果在重新部署时遇到问题,最简单的方法是使用 不离开有人占领的港口。也就是说,关闭您的春季应用程序的上下文,这样 PORT 就可以关闭了。

你可以这样做:

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

另一种方法是: 在 试试看块中打开上下文

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

Try () 将负责关闭上下文,因此 PORT,即使代码在某个地方中断,也要通过 呼叫 自动关闭

档号: 尝试使用资源

CMD 首播:

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

然后得到 PID 号码并运行以下命令: 让它199,

taskkill /F /PID 199
  • 解决方案1

作为一种解决方案,您可以通过添加以下内容来更改 application.properties 中的默认端口。

   server.port = 8090

enter image description here

  • 解决方案2

如果上述解决方案不起作用,请使用此解决方案。 在这里,我们使用命令提示符终止使用该端口的进程。

对我来说, 波特 = 8090, PID = 22208

1) . (这用于查找 PID)

netstat -ano | findstr :8090

2) . (终止该进程)

 taskkill /PID 22208 /F

enter image description here

祝你好运!

如果有人偶然发现这篇文章,他的问题是应用程序启动两次而不是一次,它显然失败了,因为端口已经在使用的第一个实例的应用程序。尝试在 yml/properties 文件中添加这些参数。

安静时期: 2000

民意调查-间隔: 3000

Https://github.com/spring-projects/spring-boot/issues/25269

Https://github.com/spring-projects/spring-boot/issues/12760

Https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.globalsettings.configuring-file-system-watcher

# 如果你在视窗操作系统(第一条路)

  • 打开任务栏

  • 右键单击运行 JDK 二进制进程

  • enter image description here

  • 在右键单击后,然后单击结束任务

# 如果你在 windows os (第二条路)

  • win+r-> 按 Enter (open windows command permot)
  • enter image description here
  • Taskkill /F /IM <PID>

您也可以改变端口号,尝试该方法将改变端口8080的错误

enter image description here

对于 Spring Boot 2和更高版本,将属性添加到应用程序配置文件(application.properties 或 application.yaml) :

spring.main.web-application-type=WebApplicationType

WebApplicationType 可以是:

  • NONE-应用程序不应该作为 Web 应用程序运行,应该 不启动嵌入式网络服务器。
  • 应用程序应该作为一个反应式 Web 应用程序运行,并且应该启动一个嵌入式反应式 Web 服务器。
  • SERVlet-应用程序应该作为一个基于 SERVLET 的 Web 应用程序运行,并且应该启动一个嵌入式 SERVLET Web 服务器。