ссылка на файл configuration.properties вне .war - PullRequest
22 голосов
/ 03 февраля 2011

Я хочу развернуть войну, и война должна получить некоторые свойства извне войны (скажем, где находится файл .war, тот же каталог).

на данный момент это лучшее решение, которое я нашел:

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

но это решение заставляет меня всегда держать его в домашнем каталоге. Я хочу, чтобы он находился в каталоге веб-приложений Tomcat, где я развернул свой .war. Я только ищу решение, которое включает в себя абсолютный путь. если относительный путь абсолютно невозможен, то я рассмотрю абсолютный путь.

спасибо заранее.

Ответы [ 6 ]

17 голосов
/ 03 февраля 2011

вот одно из решений:

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

дайте мне знать, если есть что-то лучше, например, могу ли я избавиться от справки по каталине и как-нибудь сделать ее более общей.

3 голосов
/ 30 декабря 2013

Довольно поздно для этой вечеринки, но я решил опубликовать ответ, потому что этот вопрос впервые появился в Google для меня.Я не уверен, сработало ли это в то время, когда был задан вопрос, но начиная с Spring 3.1, вы можете сделать это, чтобы использовать абсолютный путь:

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

Обратите внимание, что есть три косые черты.Первые два для протокола: "file: //".

3 голосов
/ 03 февраля 2011

Одним из решений, которое я могу предложить, является использование системного свойства для передачи пути к файлу конфигурации.

Есть 2 уровня свойств:

  • Свойства системы Java, отправленные с помощью ключа -D в JVM и извлеченные с помощью System.getProperty()
  • Переменные среды ОС, которые вы определяете на уровне ОС и можете получить доступ с помощью System.getenv()
1 голос
/ 03 февраля 2011

Шаг 1: Определите свойства:

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

Шаг 2: Используйте его в своем приложенииПример:

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

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

0 голосов
/ 30 января 2015

Вы можете определить любую переменную в качестве параметра контекста в context.xml Tomcat и использовать ее в applicationContext.xml, помещенном в war.

Например, context.xml:

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

applicationContext.xml:

<beans ...>
   <context:property-placeholder location="file:${configlocation}" ... />
</beans>
0 голосов
/ 03 февраля 2011

Вы можете поместить файл свойств в classpath и просто указать имя файла свойств. С помощью кода Java, вы можете сделать это , как это

Я думаю, что Spring также должен проверять файл свойств в classpath. Вы можете попробовать поместить файл свойств в путь к классу и указать только имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...