我的应用程序使用Spring DefaultMessageListenerContainer
来处理传入的消息。该应用程序的主要方法已经注册了一个关闭钩子。
问题是:强制关闭应用程序上下文的最佳方法是什么?
如果我在消息监听器中抛出RuntimeException
,它将由容器处理,而不是传递。调用System.exit是否可以接受?我是否将ApplicationContext
传递给需要关闭的每个班级,以便我可以在其上拨打close()
?
答案 0 :(得分:13)
您可以将应用程序上下文转换为ConfigurableApplicationContext
并在其上调用close()
。至少这是在Web应用程序环境中关闭上下文时发生的情况,如果servlet上下文被销毁的话。
如果你想获得ApplicationContext
,你的bean可以实现ApplicationContextAware
另一种选择是注入(或使用@Autowired
自动装配)应用程序上下文:
@Inject
private ApplicationContext ctx;