是否可以按需加载弹簧应用程序上下文? 场景如下: 我有一个带有设置页面的Web应用程序,供用户输入数据库属性。这些存储在属性文件中,并在安装后重新启动时将弹簧PropertyPlaceHolderConfigurer加载到application-context.xml中。
但是,如果我没有初始有效的数据库信息,则spring无法启动。因此,设置页面不会显示。是否有任何干净的方法来阻止加载上下文?
我想到的一个解决方案是在web.xml中删除上下文监听器并在安装后将其写回,但这是一个讨厌的黑客而不是一个干净的解决方案。
答案 0 :(得分:3)
只是......不要启动它。我想你是从web.xml
引导Spring。不要将ContextLoaderListener
放在那里(或者将一些最小的上下文放在几乎不显示的设置页面上)。
不幸的是,一旦设置结束,您可以开始(并停止)Spring上下文。这很简单,你可以从代码中启动Spring,例如使用ClassPathXmlApplicationContext
。
答案 1 :(得分:0)
在考虑了一下之后,我将采用以下方法:
单独保留web.xml,只需将spring类替换为委托给它们的客户端。所以 在我的情况下,这将是一个
protected class OnDemandContextLoaderListener extends ContextLoaderListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// some logic to find out if properly setup
// if so:
super.contextInitialized(event):
}
...
}
也应该与DispatcherServlet一起使用。