복붙노트

[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. ==============================

    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. ==============================

    2.나는 왜 당신이 봄을 돌보고 싶어하는지 모르겠다. 질문을 오해하지 않는 한 컨테이너 응용 프로그램 수명주기와 함께 갈 수 있습니다.

    나는 왜 당신이 봄을 돌보고 싶어하는지 모르겠다. 질문을 오해하지 않는 한 컨테이너 응용 프로그램 수명주기와 함께 갈 수 있습니다.

    LifeCycle (부두) 및 LifeCycleListener (바람둥이)를 작성하고 LifeCyle onStart 및 onStop에서 재정의하십시오. 적절한 이벤트가 발생하면 Tomcat의 LifeCycleListener에 대해 비슷한 솔루션을 사용하십시오.

  3. from https://stackoverflow.com/questions/16373276/predestroy-method-of-a-spring-singleton-bean-not-called by cc-by-sa and MIT license