停止Spring应用程序上下文时未关闭management.server.port

时间:2018-10-14 15:04:56

标签: spring-boot

使用以下命令停止spring应用程序上下文时遇到问题: ConfigurableApplicationContext.close();

http端口已停止,但弹簧执行器管理端口management.server.port 9001未关闭。

因此,当我尝试重新启动应用程序时,spring给出以下异常: org.springframework.boot.web.server.PortInUseException: Port 9001 is already in use

谢谢。


使用application.properties片段更新:

management.server.port=9001
management.server.ssl.enabled=false
management.endpoints.web.exposure.include=info,health

1 个答案:

答案 0 :(得分:0)

我不确定是否会有所帮助,但首先,我将尝试手动杀死9001上正在运行的所有内容。

我使用命令:lsof -i :9001来获取PID,然后是kill -9 <PID>

然后尝试再次运行应用程序,它将运行正常。等待关机,然后重新开始。

我在本地设置了一个非常基本的Spring应用程序,无法复制该问题。

package com.example.demo;

import org.springframework.beans.BeansException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class DemoApplication implements ApplicationContextAware {

  private static ApplicationContext appContext;

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);

    ((ConfigurableApplicationContext)appContext).close();
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    appContext = applicationContext;
  }
}

我的Yaml文件如下所示:

management:
  server:
    port: 9001

server:
  port: 8080

您能否提供一个配置文件示例以及您在哪里调用ConfigurableApplicationContext.close();