[SPRING] 호출되지 않는 Spring 싱글 톤 Bean의 @PreDestroy 메소드
SPRING호출되지 않는 Spring 싱글 톤 Bean의 @PreDestroy 메소드
bean bean에 다음과 같이 정의 된 Spring bean이 있습니다.
<context:annotation-config />
[...]
<bean id="myBackend" class="mycompany.BackendBean" scope="singleton" />
빈 내부에는 웹 응용 프로그램이 시작될 때와 종료되기 전에 실행되어야하는 두 가지 메소드가 있습니다.
public class BackendBean implements IBackend {
private static final Logger LOGGER = LoggerFactory
.getLogger(BackendBean.class);
@PostConstruct
public void init()
{
LOGGER.debug("init");
}
@PreDestroy
public void destroy()
{
LOGGER.debug("destroy");
}
}
서버 (mvn jetty : run)를 실행하면, 콘솔에서 init 메소드의 결과를 볼 수 있습니다.이 메소드를 통해 init 메소드가 실행되었다고 결론 내릴 수 있습니다.
Ctrl-C를 누르면 Jetty가 종료되기 시작하며 destroy 메소드의 결과는 표시되지 않습니다.
응용 프로그램이 종료되면 destroy 메소드를 실행하기 위해 무엇을 변경해야합니까?
해결법
-
==============================
1.응용 프로그램이 종료 될 때 Spring이 @PreDestroy 콜백 메소드를 호출하려면 종료 훅을 추가하고 응용 프로그램 컨텍스트를 닫아야합니다. Runtime.getRuntime (). addShutdownHook (Thread) 또는 Jetty를 사용하여 JVM에 훅을 첨부 할 수 있습니다 그러한 API를 제공하는 경우. JVM 셧다운 훅을 사용하는 방법은 다음과 같습니다.
응용 프로그램이 종료 될 때 Spring이 @PreDestroy 콜백 메소드를 호출하려면 종료 훅을 추가하고 응용 프로그램 컨텍스트를 닫아야합니다. Runtime.getRuntime (). addShutdownHook (Thread) 또는 Jetty를 사용하여 JVM에 훅을 첨부 할 수 있습니다 그러한 API를 제공하는 경우. JVM 셧다운 훅을 사용하는 방법은 다음과 같습니다.
final ApplicationContext appContext = ... // create your application context // using one of the various application context classes Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { appContext.close(); }});
-
==============================
2.나는 왜 당신이 봄을 돌보고 싶어하는지 모르겠다. 질문을 오해하지 않는 한 컨테이너 응용 프로그램 수명주기와 함께 갈 수 있습니다.
나는 왜 당신이 봄을 돌보고 싶어하는지 모르겠다. 질문을 오해하지 않는 한 컨테이너 응용 프로그램 수명주기와 함께 갈 수 있습니다.
LifeCycle (부두) 및 LifeCycleListener (바람둥이)를 작성하고 LifeCyle onStart 및 onStop에서 재정의하십시오. 적절한 이벤트가 발생하면 Tomcat의 LifeCycleListener에 대해 비슷한 솔루션을 사용하십시오.
from https://stackoverflow.com/questions/16373276/predestroy-method-of-a-spring-singleton-bean-not-called by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 JPA로 version 속성이 설정되지 않은 이유는 무엇입니까? (0) | 2019.02.14 |
---|---|
[SPRING] HttpStatus 상태 코드를 기반으로 Spring 재시도에서 RetryPolicy를 설정할 수 있습니까? (0) | 2019.02.14 |
[SPRING] 봄 MVC 컨트롤러에서 컨텍스트 경로를 얻는 방법 (0) | 2019.02.14 |
[SPRING] 어떻게 자바에서 주석 실행 순서를 보장하기 위해? (0) | 2019.02.14 |
[SPRING] 추상 클래스의 Spring Autowire Annotation : 고유 bean이 정의되어 있지 않다. (0) | 2019.02.14 |