如何在我的java Web应用程序之外移动spring xml配置?
我想将spring.xml存储在我的Web应用程序之外,因此我不必创建我的应用程序的新版本来更改配置。
这样做的最佳方式是什么?
答案 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,则可能难以隔离这两个文件,因为它们不是长期坚持特定的战争。