我的應用程序使用Spring DefaultMessageListenerContainer
來處理傳入的消息。該應用程序的主要方法已經註冊了一個關機掛鉤。從bean強制Spring關閉的最佳方法?
問題是:強制應用程序上下文關閉的最佳方式是什麼?
如果我在消息偵聽器中拋出RuntimeException
,它由容器處理,而不是傳遞。調用System.exit是否可以接受?我是否將ApplicationContext
傳遞給需要關閉的每個班級,因此我可以撥打close()
進行關閉?
我的應用程序使用Spring DefaultMessageListenerContainer
來處理傳入的消息。該應用程序的主要方法已經註冊了一個關機掛鉤。從bean強制Spring關閉的最佳方法?
問題是:強制應用程序上下文關閉的最佳方式是什麼?
如果我在消息偵聽器中拋出RuntimeException
,它由容器處理,而不是傳遞。調用System.exit是否可以接受?我是否將ApplicationContext
傳遞給需要關閉的每個班級,因此我可以撥打close()
進行關閉?
您可以將您的應用程序上下文轉換爲ConfigurableApplicationContext
並在其上調用close()
。至少這是在Web應用程序環境中關閉上下文時發生的情況,如果該servlet上下文被銷燬。
如果你想要得到阿霍德的ApplicationContext
的,你的bean可以實現ApplicationContextAware
另一種選擇是注入(或@Autowired
自動裝配)的應用程序上下文:
@Inject
private ApplicationContext ctx;
爲什麼你需要關閉關閉應用程序上下文? – Bozho
因爲消息監聽器可以決定它需要;要麼是因爲它收到了一條要求應用程序關閉的管理消息,或者是因爲發生了異常情況。有很多,其中之一是收到太多重試(這是一個高容量系統) – xcut