스프링 부트를 처음 접했고 @PreDestroy 주석을 무시하는 스프링 부트 응용 프로그램이 있습니다. 명령 행이나 Eclipse를 통해 실행하면스프링 부트 @PreDestroy 주석이 작동하지 않습니다.
코드는 다음과 같습니다 결코 응용 프로그램이 종료 될 때 실행되는 @PreDestroy 코드를 볼 수 없습니다 (예를 통해 CTRL-C) ...
Application.java :
@SpringBootApplication
public class Application {
@Autowired
private MessageProcessor messageProcessor;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@PostConstruct
public void init() {
messageProcessor.run();
}
}
메시지 프로세서 구성 :
@Configuration
public class MessageProcessorConfiguration {
@Bean
public MessageProcessor messageProcessor() {
return new MessageProcessorImpl();
}
}
메시지 프로세서 : 컨텍스트 생성 동안
public class MessageProcessorImpl implements MessageProcessor {
@Override
public void run() {
while (isActive()) {
…
}
}
@PreDestroy
public void shutdown() {
System.out.println("MessageProcessorImpl - shutting down");
}
}
PreDestroy 주석은 인스턴스가 ** 컨테이너 **에 의해 ** 제거되는 ** 신호를 보내는 콜백 알림으로 메소드에 사용되며 응용 프로그램의 사전 차단 (Pre-Shuttdown)이 아닙니다. –
그래서 실행중인 응용 프로그램에서 ctrl-c를 사용하거나을 삭제하면 @PreDestroy가 실행되지 않습니까? 이 이벤트를 잡을 수있는 방법이 있습니까? –
finbin
이 질문을보십시오 http://stackoverflow.com/questions/23936162/register-shutdownhook-in-web-application –