2009-09-21 75 views
6

如何將我的spring xml配置移動到我的java web應用程序之外?如何在我的Web應用程序之外移動我的spring xml配置?

我想將我的spring.xml存儲在我的web應用程序之外,因此我不必創建應用程序的新構建來更改配置。

這樣做的最好方法是什麼?

+0

理想情況下,您要存儲在哪裏? – skaffman 2009-09-21 20:39:09

+0

理想情況下,我們將使用傳遞給tomcat的變量來確定它的位置。硬編碼路徑雖然是可以接受的選擇。 – ScArcher2 2009-09-21 20:45:44

回答

7

由於羅德約翰遜解釋了它在this thread

可以使用classpath:前綴從classpath加載,與正常春聽衆或啓動的servlet。 Spring的資源抽象使得這成爲可能。您可以自由組合和匹配來自WEB-INF和類路徑的資源。

所以,把配置文件放在classpath中的web應用外,並宣佈在web.xml如下:

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

我認爲,依靠類路徑比使用絕對路徑更便攜。

+1

這絕對是獨立應用的好方法。對於Web應用程序,但是,爲了在classpath中的東西,但Web應用程序文件夾之外你必須讓你的上下文中可用,這些可能是理想的(除非有問題的應用程序是唯一的一個),整個服務器。 – ChssPly76 2009-09-21 20:45:15

+0

更準確地說,這意味着要提供給所有的webapps(不知道這是你的意思與「整個服務器」)的背景文件。但我同意這可能確實不理想。 – 2009-09-21 20:58:57

2

可以將其移動到某個文件夾(外Web應用程序結構),並明確指定範圍內的位置指向背景下,文件夾在您的web.xml

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

這就是說,最好的方式做這可能完全不是這樣做的:-)而是重新考慮如何部署應用程序(例如,您可以創建包含更改而不是全面WAR的「修補程序」或「升級」部署單元)。指定絕對路徑往往比它的價值更麻煩。

0

爲什麼要爲此構建複雜的問題,這是一個部署問題。大多數容器以「分解」形式部署WAR,這意味着文件系統上的某處是spring.xml文件。

如果您想更新它,只需找到實際位置,然後將新的spring.xml複製到舊的位置。然而,與此同時,你的戰爭仍然是最重要的「真相之源」。

WAR的使用和部署往往非常簡單,所以將您的配置儘可能捆綁在WAR中是有好處的。

因此,您可以通過在容器後面進行更新並直接對其進行編輯(或複製)來更新spring.xml。最後,在WAR外部使用spring.xml意味着它可用於所有的WAR,並且如果您以後決定在系統中添加另一個WAR,則可能難以將這兩個文件隔離,因爲它們是沒有長時間停留在特定的WAR上。

+0

同意這是一個部署問題。但是,所有WAR的上下文可用都是錯誤的 - 爲什麼會這樣呢? – ChssPly76 2009-09-21 20:35:05

+0

我認爲他意味着同一個WAR的兩個副本會引用文件系統中的同一個文件...似乎並不是一個令人信服的理由,但不要這樣做,儘管 – skaffman 2009-09-21 20:42:15

+0

我們將部署這個。戰爭給不同配置的多個客戶。這就是我們需要外部配置文件的原因。 – ScArcher2 2009-09-21 20:46:35

相關問題