Spring boot &引用;已在使用的地址:bind";运行Spring启动应用程序时

Spring boot &引用;已在使用的地址:bind";运行Spring启动应用程序时,spring-boot,Spring Boot,我在运行示例Spring引导应用程序时遇到问题。 当我尝试运行它时,会出现以下错误: java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Unknown Source) at sun.nio.ch.Net.bind(Unknown Source)

我在运行示例Spring引导应用程序时遇到问题。 当我尝试运行它时,会出现以下错误:

 java.net.BindException: Address already in use: bind
            at sun.nio.ch.Net.bind0(Native Method)
            at sun.nio.ch.Net.bind(Unknown Source)
            at sun.nio.ch.Net.bind(Unknown Source)
            at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
            at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
            at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:473)
o.apache.catalina.core.StandardService   : Failed to initialize connector [Connector[org.apache.coyote.http11.Http11NioProtocol-8080]]

    org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11NioProtocol-8080]]
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
            at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
            at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
            at org.apache.catalina.startup.Tomcat.start(Tomcat.java:335)
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:57)
            at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:52)
            at 
java.net.BindException:地址已在使用中:bind
位于sun.nio.ch.Net.bind0(本机方法)
位于sun.nio.ch.Net.bind(未知源)
位于sun.nio.ch.Net.bind(未知源)
位于sun.nio.ch.serversocketchannelpl.bind(未知源)
位于sun.nio.ch.ServerSocketAdaptor.bind(未知源)
位于org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:473)
o、 apache.catalina.core.StandardService:未能初始化连接器[connector[org.apache.coyote.http11.Http11NioProtocol-8080]]
org.apache.catalina.LifecycleException:未能初始化组件[Connector[org.apache.coyote.http11.Http11NioProtocol-8080]]
位于org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
位于org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
位于org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
位于org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
位于org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
位于org.apache.catalina.startup.Tomcat.start(Tomcat.java:335)
位于org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:57)
位于org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.(TomcatEmbeddedServletContainer.java:52)
在
“地址已在使用”表示端口8080上已运行另一个应用程序。在启动应用程序或让应用程序在其他端口上运行之前,请使用操作系统工具查找并结束该进程。如果在启动应用程序中使用嵌入式服务器,则可以指定以下属性:

server.port=8085 

当然,您可以选择您想要的任何端口。

在第一次运行时,是否正常?然后再运行一次,它出错了吗? 如果正确,您需要在再次运行之前停止服务。 这里是停止的方法。 单击“停止”按钮,如下图所示


您的服务器似乎已经启动了。如果您使用的是基于linux的系统,请在终端中键入以下命令,以检查系统上哪个端口处于活动状态

“ps-ef | grep 8080”(或提及的任何端口)

现在,如果希望在同一端口上运行服务器,则需要终止此端口

杀死-98080

哇!!再次尝试启动应用程序,它将正常工作

额外: 你会来找我抱怨一个重要的应用程序已经在上面提到的端口(8080)上监听,你不想杀死它。没问题

在资源文件夹中创建application.properties文件,并将端口更改为您喜欢的任何端口

server.port = 8081
哇!!你做到了!!:) 如果需要进一步澄清,请告诉我

两种可能性

P1.另一个应用程序正在使用端口8080

解决方案:-

  • a、 停止该应用程序并释放应用程序的8080端口
  • b、 更改应用程序服务器端口,以便创建名为 资源文件夹中的application.properties并添加属性

    server.port=8085

(8085可由您选择的任何端口号替换,该端口号不会与其他端口号冲突 应用程序服务器端口)

  • P2。您的应用程序已在运行

    解决方案

    • a。对于这种情况,非常简单的解决方案是停止当前 正在运行应用程序并重新运行它
    • b、 如果要运行应用程序的多个实例,请保留 当前应用程序正在运行如上所述的更改服务器端口,以及 运行新实例将在另一个端口上运行的应用程序

    日志显示服务器已在端口8080上启动。我也面临同样的问题。转到windows任务管理器并结束javaw.exe进程,它在我的应用程序上运行。

    即使我遇到了这个问题,你也可以停止应用程序(顶部工具栏上有一个停止按钮)重新启动它对我有效,我使用了STS,这是因为您在eclipse IDE中运行了一次spring boot应用程序并关闭了该应用程序,并且假设嵌入式服务器已停止。但事实并非如此。即使在Eclipse->Console窗口中关闭了应用程序,嵌入式tomcat服务器仍在运行。您可以做的是,再次运行spring引导应用程序并查看控制台消息。在Spring徽标之后,您可以立即找到PID 16676。这是您需要在“Wndows任务管理器->流程->PID”中搜索的PID。选择该流程并“结束任务”。现在,如果启动spring引导应用程序,它将毫无问题地启动

    我有一个非常简单的解决方案:

    如上所述,当您启动Spring Boot应用程序时,控制台会显示底层服务器(Tomcat或Undertow,或其他)的PID;您可以在不终止前一个应用程序的情况下再次启动该应用程序,尤其是当您处于调试模式时,,因此会出现错误。这也适用于Intellij

    但是,如果您再次启动,则PID将不再适用于您,因为先前的会话输出已清除

    所以,如果您正在使用Eclipse,只需关闭它,然后打开任务管理器来终止其他
    java.exe
    JVM进程。确保没有其他无法停止的基于JVM的服务正在运行。(如Kafka服务器、Apache Storm等)


    Tomcat实例就是其中之一。

    在Eclipse情况下,检查“进度”窗口(Windows>ShowView>Progress)中是否有项目运行 停止正在运行的进程,该进程可能正在锁定所需的端口。

    G
     open command prompt as Administrator.
    --> netstat -ano | findstr :<PORT>
           netstat -ano | findstr :8080
      TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10568
      TCP    [::]:8080              [::]:0                 LISTENING       10568
    -->taskkill /PID <PID> /F
       taskkill /PID 10568 /F