后检查实时线程(S)
如果我从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
我使用以下代码来收听ContextClosedEvent。
@Component
public class ListenerClass {
@EventListener
public void handleContextClose(ContextClosedEvent event) {
shutdown(); // This method has System.exit(SpringApplication.exit(ctx)); inside it
}
}
我尝试将以下代码添加到上述listererclass,但并未解决此问题:
@EventListener
public void handleContextStop(ContextStoppedEvent event) {
shutdown();
}
按下Control-C时,如何导致应用程序终止?
未达到您的侦听器(使用调试器验证)。否则system.exit将杀死所有线程 - 顺便说一句,这是不良练习。
您应该通过JVisualVM连接到JVM,并在击中 ^C