0

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

但是,如果我没有初始的有效数据库信息,spring 将无法启动。因此,设置页面不会显示。有什么干净的方法可以防止上下文被加载吗?

我想到的一个解决方案是删除 web.xml 中的上下文侦听器并在设置后将其写回,但是这与其说是一个干净的解决方案,不如说是一个令人讨厌的 hack。

4

2 回答 2

3

只是...不要启动它。我猜你是从web.xml. 不要放在ContextLoaderListener那里(或者放一些最小的上下文来勉强显示设置页面)。

不幸的是,一旦设置结束,您就可以开始(和停止)Spring 上下文了。这很简单,您可以从代码中启动 Spring,例如使用ClassPathXmlApplicationContext.

于 2012-11-15T22:45:48.260 回答
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 一起使用。

于 2012-11-15T23:18:26.950 回答