2011-02-03 11 views
21

chcę wdrożyć wojny i wojny powinno przynieść pewne właściwości spoza wojny (powiedzmy, w którym plik .war jest ten sam katalog.)odwoływania się configuration.properties spoza .war

u Moment ten jest najlepszym rozwiązaniem znalazłem:

<context:property-placeholder location="file:${user.home}/configuration.properties" ignore-unresolvable="true"/> 

ale to rozwiązanie zmusza mnie, aby utrzymać go zawsze w katalogu domowym. Chcę, żeby to było w katalogu webapps tomcat, gdzie zainstalowałem mój .war. Szukam tylko rozwiązania, które obejmuje absolutną ścieżkę. jeśli względna ścieżka jest absolutnie niemożliwa, wtedy rozważę absolutną ścieżkę.

z góry dzięki.

+0

Napisałeś: "Ja jestem tylko szuka rozwiązania, które obejmuje ścieżkę bezwzględną", ale myślę, że ty oznaczało naprzeciwko. –

+0

Nie, nie zrobiłem. spójrz na ścieżkę, której użyłeś, jej nie jest absolutna. user.home typem zmiennych może być cokolwiek. – Ikthiander

+0

Czy mogę zapytać * dlaczego * chcesz, aby twoja konfiguracja znajdowała się poza kontekstem aplikacji internetowej? Czy to dlatego, że chcesz udostępnić konfigurację innym aplikacjom internetowym? Jeśli tak, to są lepsze sposoby na zrobienie tego. – Qwerky

Odpowiedz

16

tutaj jest jedno rozwiązanie:

<context:property-placeholder 
    location="file:${catalina.home}/webapps/datasource.properties" 
    ignore-unresolvable="true"/> 

dać mi znać, jeśli jest coś lepszego, na przykład, jeśli mogę pozbyć odniesienia Catalina domu i uczynić go bardziej ogólnego jeden jakoś.

+0

Myślę, że to jest najlepszy sposób, ale to jest borking mój IDE wyboru intellij http://stackoverflow.com/q/13606328/106261 – NimChimpsky

0

Możesz umieścić plik właściwości w ścieżce klasy i podać nazwę pliku właściwości. Przez kod java, możesz to zrobić like this

Przypuszczam, że wiosna powinna również sprawdzić plik właściwości w ścieżce klas. Możesz spróbować umieścić plik właściwości w ścieżce klas i podać tylko nazwę pliku.

+0

za komentarz. intencją nie jest stosowanie takich kodów, ponieważ używamy już sprężyny, a następny krok powinien być minimalny. – Ikthiander

3

Jednym z rozwiązań, jakie mogę zaoferować, jest wykorzystanie właściwości systemu do przekazania ścieżki do pliku konfiguracyjnego.

Istnieją 2 poziomy właściwości:

  • właściwości systemowe Java wysłane za pomocą przełącznika -d JVM i wydobyte przez System.getProperty()
  • OS zmiennych środowiskowych, które określają na poziomie systemu operacyjnego i ma dostęp za pomocą System.getenv()
+0

dzięki AlexR, ale proszę spojrzeć na jeden z możliwych rozwiązań napisałem bez udziału java. będę zadowolony z używania jndi, użycie kodów Java będzie ostatnią rzeczą do zrobienia. – Ikthiander

1

Etap 1: Określanie właściwości:

<util:properties id="myProperties" location="file:some/Absolute/path" />

Krok 2: użyj go w swojej aplikacji. Przykład:

(1) public ModelAndView doWhatever(@Value("#{myProperties['some.outside.property']}") String whatever) { ... }

LUB (2) Properties props = appContext.getBean("myProperties", Properties.class);

3

Sporo późno do tej partii, ale pomyślałem, że pisać odpowiedź na to pytanie, ponieważ pojawił się pierwszy w Google dla mnie. Nie jestem pewien, czy to działało w momencie padło pytanie, ale od wiosny 3.1, można to zrobić, aby użyć ścieżki bezwzględnej:

<context:property-placeholder location="file:///etc/myApp/myApp.conf"/> 

pamiętać, że istnieją trzy forward-ukośniki. Pierwsze dwa dotyczą protokołu: "file: //".

0

Możesz zdefiniować dowolną zmienną jako parametr kontekstu w Tomcat's context.xml i użyć jej w pliku applicationContext.xml umieszczonym wewnątrz wojny.

Na przykład context.xml:

<Context> 
    <Parameter name="configlocation" value="/etc/application/my.properties" override="false"/> 
</Context> 

applicationContext.xml:

<beans ...> 
    <context:property-placeholder location="file:${configlocation}" ... /> 
</beans> 
Powiązane problemy