2010-03-08 2 views
6

내 응용 프로그램은 스프링 DefaultMessageListenerContainer을 사용하여 수신 메시지를 처리합니다. 앱의 기본 메소드는 이미 종료 후크를 등록합니다.Bean에서 스프링 종료를 강제하는 가장 좋은 방법은 무엇입니까?

질문 : 응용 프로그램 컨텍스트를 강제 종료하는 가장 좋은 방법은 무엇입니까?

메시지 청취자에 RuntimeException을 던지면이 메시지는 컨테이너에 의해 처리되고 전달되지 않습니다. System.exit을 사용할 수 있습니까? ApplicationContext을 종료해야하는 모든 클래스에 전달하므로 close()을 호출 할 수 있습니까?

+1

: 당신이 ApplicationContext의 연락을 취하는 얻고 싶은 경우에

, 여러분의 빈은 애플리케이션 컨텍스트를 또 다른 옵션을 주입하는 것입니다 ApplicationContextAware

구현 (또는 @Autowired에 autowire하기) 수 응용 프로그램 컨텍스트를 아래로? – Bozho

+0

메시지 수신기가 필요하다고 결정할 수 있기 때문에; 앱을 종료하라는 메시지를 받았거나 비정상적인 상태가 발생했기 때문입니다. 그 중 많은 것들이 있습니다. 그 중 하나는 너무 많은 재시도를 받았습니다 (이것은 대용량 시스템입니다). – xcut

답변

13

응용 프로그램 컨텍스트를 ConfigurableApplicationContext으로 캐스팅하고 close()을 호출 할 수 있습니다. 최소한 서블릿 컨텍스트가 파괴되는 경우 웹 애플리케이션 환경에서 컨텍스트가 종료 될 때 발생합니다. 당신이 종료해야 할 이유

@Inject 
private ApplicationContext ctx; 
+0

종료를 수행해야하는 bean은 컨텍스트를 어떻게 얻습니까? 결국 POJO입니다. – xcut

+0

@xcut 그것은 응용 프로그램에 따라 다릅니다. 웹 응용 프로그램, 데스크톱 응용 프로그램입니까? – Bozho

+0

Nither - 메시지 큐/라우팅 시스템. 그래서 컨텍스트를 빈에 전달하거나 일종의 추가 라이프 사이클 인터페이스를 구현하는 유일한 방법은 없을까? – xcut

관련 문제