2009-12-01 7 views
9

나는 셧다운시 빈 파괴 메소드를 호출하지 않는 스프링 애플리케이션을 가지고있다. beanRefFactory의 인스턴스화로 인한 참조를 보았습니다.이 문제는 응용 프로그램 컨텍스트에서 registerShutdownHook()을 수동으로 호출하여 우회 될 수 있습니다.이 메서드는 2.0에서 2.5 사이의 스프링에서 사라진 것처럼 보입니다.스프링 2.5에 셧다운 훅 등록하기

누군가가 이것이 현재 어떻게 진행되고 있는지를 알려줄 수 있습니까?

감사합니다.

+0

설명 된 초기 문제에 대한 설명 링크를 게시 할 수 있습니까? – skaffman

답변

17

이 방법은 여전히 ​​에서 사용할 수 있으며 AbstractApplicationContext으로 구현됩니다. ,

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run(){ 
     if (ctx instanceof ConfigurableApplicationContext) { 
      ((ConfigurableApplicationContext)ctx).close(); 
     } 
    } 
}); 
0

이렇게 많은 upvotes :

그래서 당신은 단순히 응용 프로그램을 폐쇄하거나 자신의 종료 훅을 사용하는 동안 자신을 ((ConfigurableApplicationContext)ctx).close() 부를 수있는, 또는이

ApplicationContext ctx = ...; 
if (ctx instanceof ConfigurableApplicationContext) { 
    ((ConfigurableApplicationContext)ctx).registerShutdownHook(); 
} 

을 할 수 있습니다 하지만 두 번째 문장은 완전히 잘못되었습니다. java의 system.exit은 shutdownhook에 도달하기 전에 스프링을 종료합니다. 올바른 방법은 다음 네 가지입니다.

특정 행동

1 InitializingBean 표시하고 DisposableBean 표시 콜백 인터페이스 이 다른 인식 인터페이스를 3 사용자 정의 초기화() 파괴() 빈 설정 파일의 방법 4 @PostConstruct와 @PreDestroy 어노테이션

클릭 here!