如何在我的Web应用程序之外移动spring xml配置?

时间:2009-09-21 20:20:18

标签: java spring web-applications

如何在我的java Web应用程序之外移动spring xml配置?

我想将spring.xml存储在我的Web应用程序之外,因此我不必创建我的应用程序的新版本来更改配置。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:7)

正如罗德约翰逊在this thread中解释的那样:

  

您可以使用classpath:前缀从类路径加载普通的Spring侦听器或启动servlet。 Spring的资源抽象使这成为可能。您可以自由地混合和匹配来自WEB-INF和类路径的资源。

因此,将配置文件放在webapp外部的类路径中的某个位置,并在web.xml中声明以下内容:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:springContext*.xml</param-value>
</context-param>

我认为依赖类路径比使用绝对文件路径更便携。

答案 1 :(得分:2)

您可以将其移至某个文件夹(在webapp结构之外)并明确指定上下文位置以指向web.xml中该文件夹中的上下文:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>file:/full/path/to/context.xml</param-value>
</context-param>

也就是说,最好这样做的方法可能是根本不做:-)而是重新考虑如何部署应用程序(例如,您可以创建“补丁”或“升级” “包含更改的部署单元,而不是完全成熟的WAR)。指定绝对路径往往比它的价值更麻烦。

答案 2 :(得分:0)

当部署问题出现时,为什么要为此构建复杂化。大多数容器以“爆炸”形式部署WAR,这意味着文件系统上的某个位置是spring.xml文件。

如果您想要更新它,只需找到实际位置,然后将新的spring.xml复制到旧版本上。然而,与此同时,你的战争仍然是严谨的“真相来源”。

WAR的使用和部署往往非常简单,因此在WAR中尽可能地捆绑您的配置是有好处的。

因此,您可以通过在容器背面后面更新spring.xml,然后直接对其进行编辑(或复制)。

最后,在WAR之外使用spring.xml意味着它可用于所有WAR,如果您稍后决定向系统添加另一个WAR,则可能难以隔离这两个文件,因为它们不是长期坚持特定的战争。