2009-09-21 24 views
6

Jak przenieść moją wiosenną konfigurację XML poza moją aplikacją internetową java?Jak przenieść moją wiosenną konfigurację XML poza moją aplikację internetową?

Chciałbym przechowywać mój plik spring.xml poza moją aplikacją internetową, więc nie muszę tworzyć nowej wersji aplikacji, aby zmienić konfigurację.

Jaki jest najlepszy sposób na zrobienie tego?

+0

gdzie najlepiej byłoby go przechowywać? – skaffman

+0

Idealnie byłoby użyć zmiennej przekazanej do tomcat, aby określić jej lokalizację. Jednak trudna do zakodowania ścieżka jest dopuszczalną alternatywą. – ScArcher2

Odpowiedz

7

Jak Rod Johnson wyjaśnia w this thread:

Można użyć prefiksu classpath: załadować ze ścieżki klasy, z normalnym wiosennym słuchacza lub serwletu uruchamiania. Jest to możliwe dzięki abstrakcji zasobów Springa. Możesz dowolnie łączyć zasoby od WEB-INF i ścieżki klas.

Tak, umieścić pliki konfiguracyjne gdzieś w ścieżce klasy poza webapp i zadeklarować następujące w web.xml:

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

myślę, że opierając się na ścieżce klasy jest bardziej mobilny niż stosując bezwzględną ścieżkę do pliku .

+1

To zdecydowanie byłoby dobre podejście do samodzielnej aplikacji. Jednak w przypadku aplikacji webapp, aby mieć coś w ścieżce klas, ale poza folderem aplikacji webapp, musisz udostępnić kontekst dla całego serwera, który może nie być idealny (chyba że aplikacja jest jedyną). – ChssPly76

+0

Mówiąc dokładniej, oznacza to udostępnienie plików kontekstowych wszystkim aplikacjom internetowym (nie wiesz, co to znaczy "cały serwer"). Zgadzam się jednak, że to nie może być idealne. –

2

można przenieść go do jakiegoś folderu (poza strukturą webapp) i wyraźnie określić lokalizację kontekstowe aby wskazać kontekst tego folderu w web.xml:

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

Powiedział, że najlepiej sposób zrobić może to nie być w ogóle możliwe :-) i zamiast tego ponownie rozważ, w jaki sposób wdrożysz swoją aplikację (np. możesz utworzyć jednostkę "łatania" lub "uaktualnienia", która zawiera zmiany, a następnie pełny WAR). Określanie ścieżek bezwzględnych wydaje się bardziej kłopotliwe, niż jest warte.

0

Dlaczego komplikujesz kompilację, gdy jest to problem z wdrożeniem. Większość kontenerów wdraża WAR w postaci "rozbitej", co oznacza, że ​​gdzieś w twoim systemie plików znajduje się plik spring.xml.

Jeśli chcesz to zmienić, możesz po prostu zlokalizować rzeczywistą lokalizację, a następnie skopiować nowy plik spring.xml na stary. Jednocześnie wasza WOJNA pozostaje de riguer "źródłem prawdy".

Wojna jest zazwyczaj bardzo łatwa w użyciu i wdrażaniu, więc można wykorzystać ją w taki sposób, jak najlepiej w WAR.

Można więc zaktualizować plik spring.xml, przechodząc z tyłu kontenera i edytując go (lub bezpośrednio go kopiując).

Wreszcie, posiadanie pliku spring.xml poza WAR oznacza, że ​​jest on dostępny dla WSZYSTKICH twoich wojen, a jeśli zdecydujesz się później dodać kolejną wersję WAR do systemu, najprawdopodobniej będziesz miał trudności z segregowaniem tych dwóch plików, ponieważ są one nie długo zakotwiczone w konkretnym WAR.

+0

Uzgodniono, że jest to problem z wdrożeniem. Mylisz się jednak, że kontekst jest dostępny dla wszystkich WO - dlaczego by to było? – ChssPly76

+0

Myślę, że on oznacza, że ​​dwie kopie tego samego WAR odnoszą się do tego samego pliku w systemie plików ... nie wydaje się, aby nie był to powód, aby tego nie robić, ale – skaffman

+0

Wprowadzimy to samo.wojna z wieloma klientami o różnych konfiguracjach. Właśnie dlatego potrzebujemy zewnętrznego pliku konfiguracyjnego. – ScArcher2

Powiązane problemy