2014-11-06 31 views
5

To musi być jakiś głupi błąd, którego nie mogłem przejść. Próbuję przekazać na zewnątrz mój plik właściwości, obecnie umieszczony w moim domu użytkownika. Jestem ładowania pliku właściwości używając @PropertySource takiego:Spring PropertyPlaceHolder Plik właściwości konfiguracji zewnętrznej Java

@Configuration 
@PropertySources(value = { @PropertySource("file:#{systemProperties['user.home']}/.invoice/config.properties") }) 
public class PropertiesConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertiesPlaceHolderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

Ale niestety, że nie ładuje plik właściwości. Zgłasza FileNotFoundException. Ale jeśli zmienię ścieżkę na:

@PropertySources(value = { @PropertySource("file:/home/rohit/.invoice/config.properties") }) 

działa poprawnie. I to jest droga, którą ścieżka wcześniejsza rozwiązuje. Zalogowałem się, aby zweryfikować. Wydaje mi się więc, że Spel nie jest oceniany w adnotacji @PropertySource. Czy to ma działać w ten sposób?

Jeśli tak, to czy istnieje inny sposób odczytu pliku właściwości zewnętrznych, który znajduje się w /home/rohit? Nie chcę dawać absolutnej ścieżki z oczywistych powodów. I chciałbym uniknąć rozszerzenia klasy PropertyPlaceHolderConfigurer.

Inną opcją, którą próbowałem, było dodanie folderu /home/rohit/.invoice do ścieżki klasy tomcat. Wygląda jednak na to, że Spring nie używa System Classpath do usuwania przyrostka classpath:. Jakieś wskazówki na ten temat?

+1

Wyrażenie nie działa, zamiast tego użyj 'file: $ {user.home} /. Invoice/config.properties'. –

+0

@ M.Deinum Pozwól mi spróbować tego .. –

+0

@ M.Deinum Ahaa !! Zadziałało :) Napisz to jako odpowiedź, więc mogę to zaakceptować :) –

Odpowiedz

3

W wyrażeniach EL w adnotacjach nie będzie działać. Można używać symboli zastępczych ${...}, ale jest to również ograniczone do zmiennych systemowych lub środowiskowych. Jednak, ponieważ chcesz rozwiązać katalog domowy użytkownika, możesz użyć symbolu zastępczego ${user.home}.

@PropertySource("file:${user.home}/.invoice/config.properties") 

To powinno działać zgodnie z oczekiwaniami.