0

如果我从 Windows 命令提示符(使用 java -jar)中运行 Spring Boot 应用程序,然后按 Control-C 终止进程,我会得到以下控制台输出,并且进程保持打开状态:

2017-11-27 20:15:22,713 INFO [Thread-11] (AnnotationConfigEmbeddedWebApplicationContext:984) - Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6057aebb: startup date [Mon Nov 27 20:14:22 IST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2df9b86

我使用以下代码来监听 Co​​ntextClosedEvent。

@Component
public class ListenerClass {
      @EventListener
      public void handleContextClose(ContextClosedEvent event) {
          shutdown(); // This method has System.exit(SpringApplication.exit(ctx)); inside it
      }
    }

我尝试将以下代码添加到上述 ListenerClass 中,但并没有解决此问题:

  @EventListener
  public void handleContextStop(ContextStoppedEvent event) {
      shutdown();
  }

按下 Control-C 时,如何使应用程序终止?

4

1 回答 1

0

未访问您的侦听器(使用调试器进行验证)。否则 System.exit 会杀死所有线程 - 顺便说一句,这是不好的做法。

您应该通过 jvisualvm 连接到您的 JVM 并运行,并在您点击 ^C 后检查活动线程

于 2017-11-27T19:01:50.100 回答