我的应用程序使用一个spring DefaultMessageListenerContainer 处理传入消息。应用程序的主方法已经注册了一个关闭挂钩。
DefaultMessageListenerContainer
问题是:强制关闭应用程序上下文的最佳方法是什么?
如果我扔一个 RuntimeException 在消息侦听器中,它由容器处理,而不是传递。可接受呼叫系统退出吗?我要沿着 ApplicationContext 给每一个需要关闭的班级打电话 close() 在上面?
RuntimeException
ApplicationContext
close()
您可以将应用程序上下文强制转换为 ConfigurableApplicationContext 并打电话 close() 关于它。至少在web应用程序环境中关闭上下文时会发生这种情况,以防servlet上下文被破坏。
ConfigurableApplicationContext
如果你想知道 ApplicationContext ,您的bean可能实现 ApplicationContextAware
ApplicationContextAware
另一个选择是注入 @Autowired )应用程序上下文:
@Autowired
@Inject private ApplicationContext ctx;