스프링 애플리케이션을 종료하는 여러 가지 방법이 있습니다. 하나는 다음에서 close ()를 호출하는 것입니다 ApplicationContext
.
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
귀하의 질문 Ctrl+C
은 명령을 종료하는 데 자주 사용되는을 수행하여 응용 프로그램을 닫고 싶다고 제안합니다 . 이 경우 ...
사용 endpoints.shutdown.enabled=true
은 최고의 레시피가 아닙니다. 이는 애플리케이션을 종료하기 위해 엔드 포인트를 노출하는 것을 의미합니다. 따라서 사용 사례와 환경에 따라 보안을 유지해야합니다.
Ctrl+C
귀하의 경우에는 매우 잘 작동합니다. 앰퍼샌드 (&)로 인해 문제가 발생한 것으로 가정합니다.
Spring Application Context는 JVM 런타임에 종료 후크를 등록했을 수 있습니다. ApplicationContext 문서를 참조하십시오 .
당신이 말했듯이 Spring Boot 가이 후크를 자동으로 구성하는지 모르겠습니다. 나는 그것이 있다고 가정한다.
에서 Ctrl+C
쉘은 INT
포 그라운드 애플리케이션에 신호를 보냅니다 . "실행을 중단하십시오"라는 뜻입니다. 애플리케이션은이 신호를 트랩하고 종료 (Spring에 의해 등록 된 후크) 전에 정리를 수행하거나 단순히 무시 (나쁜) 할 수 있습니다.
nohup
HUP 신호를 무시하기 위해 트랩과 함께 다음 프로그램을 실행하는 명령입니다. HUP는 전화를 끊을 때 프로그램을 종료하는 데 사용됩니다 (예 : ssh 연결 닫기). 또한 프로그램이 사라진 TTY에서 차단되지 않도록 출력을 리디렉션합니다. nohup
INT 신호를 무시하지 않습니다. 따라서 Ctrl+C
작동을 방해하지 않습니다 .
귀하의 문제는 nohup이 아닌 앰퍼샌드 (&)로 인해 발생했다고 가정합니다. Ctrl+C
포 그라운드 프로세스에 신호를 보냅니다. 앰퍼샌드는 애플리케이션이 백그라운드에서 실행되도록합니다. 하나의 솔루션 : 수행
kill -INT pid
응용 프로그램 (여기서는 JVM)이 정상적으로 종료되도록 트랩 할 수 없기 때문에 kill -9
또는 사용 kill -KILL
이 잘못되었습니다.
또 다른 해결책은 애플리케이션을 포 그라운드로 되 돌리는 것입니다. 그런 다음 Ctrl+C
작동합니다. Bash Job 제어에 대해 자세히 살펴보십시오 fg
.