根据需要加载Spring上下文

时间:2012-11-15 22:37:01

标签: spring java-ee

是否可以按需加载弹簧应用程序上下文? 场景如下: 我有一个带有设置页面的Web应用程序,供用户输入数据库属性。这些存储在属性文件中,并在安装后重新启动时将弹簧PropertyPlaceHolderConfigurer加载到application-context.xml中。

但是,如果我没有初始有效的数据库信息,则spring无法启动。因此,设置页面不会显示。是否有任何干净的方法来阻止加载上下文?

我想到的一个解决方案是在web.xml中删除上下文监听器并在安装后将其写回,但这是一个讨厌的黑客而不是一个干净的解决方案。

2 个答案:

答案 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一起使用。