인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김도영님의 프로필 이미지
김도영

작성한 질문수

스프링 프레임워크 핵심 기술

IoC 컨테이너 8부: ApplicationEventPublisher

exit code 에 따른 ContextClosedEvent 작동여부

작성

·

1.4K

0

강의 잘보고 있습니다.

ContextClosedEvent  실행 부분을 따라 했는데

작동하지 않아서 한참 이유를 찾아보다가 

제가 사용중인 intellij 에서 stop application 을 하면

exit code -1 이 떨어지더군요.

그런데 영상강좌를 계속 돌려보다 알았는데 영상에서는

exit code 130 이 떨어지는걸 봤습니다.

그래서 runner 에서 이벤트 호출 하고 마지막에

System.exit(130) 을 추가했더니

ContextClosedEvent 리스너가 작동했습니다.

exit code 에 따라 왜 작동여부가 달라지는지,

개발환경에서 exit code 를 조절 가능한지 궁금합니다.

답변 1

2

백기선님의 프로필 이미지
백기선
지식공유자

윈도에서 UI 기반으로 애플리케이션 (인텔리J) 실행하고 종료할 때 발생하는 exit code가 다른가 봅니다. 이론적으로는 exit code와 상관없이 애플리케이션 종료시 이벤트가 발생해야 할거 같은데 인텔리J에서 버튼을 눌러서 종료하는 방법이 디버그 모드로 실행했는지 애플리케이션 모드로 실행했는지, OS에 따라서도 다른거 같습니다.

exit code 변경하지 않고 jar 파일로 패키징을 한 다음에 java -jar로 실행을 하고 Ctrl+C로 종료 시키니까 ContextClosedEvent 리스너가 제대로 동작하는걸 확인할 수 있었습니다. 

또는 ExitCodeGenerator를 구현하는 방법도 있기는 한데 아래 방법도 윈도 인텔리J에서는 디버그 모드로 실행할 때만 동작하네요. 좋은 질문 감사합니다.

@SpringBootApplication
public class DemoExitApplication implements ExitCodeGenerator {

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

@Override
public int getExitCode() {
return 130;
}
}
김도영님의 프로필 이미지
김도영

작성한 질문수

질문하기