Ссылаясь на конфигурацию .properties вне .war
Я хочу развернуть войну, и война должна принести некоторые свойства из-за пределов войны (скажем, где находится файл .war, тот же каталог.)
на данный момент это лучшее решение, которое я нашел:
<context:property-placeholder location="file:${user.home}/configuration.properties" ignore-unresolvable="true"/>
но это решение заставляет меня держать его всегда в домашнем каталоге. Я хочу, чтобы он был в каталоге tomcat webapps, где я развертываю мой .war. Я только ищу решение, которое подразумевает абсолютный путь. если относительный путь абсолютно невозможно, тогда я буду рассматривать абсолютный путь.
заблаговременно.
Ответы
Ответ 1
здесь есть одно решение:
<context:property-placeholder
location="file:${catalina.home}/webapps/datasource.properties"
ignore-unresolvable="true"/>
сообщите мне, есть ли что-нибудь лучше, например, если я могу избавиться от справочной ссылки Catalina и сделать ее более общей. Как-то.
Ответ 2
Одно из решений, которое я могу предложить, - использовать системное свойство, чтобы передать путь к файлу конфигурации.
Существует 2 уровня свойств:
- Свойства системы java, отправленные с помощью переключателя -D в JVM и извлеченные
System.getProperty()
- Переменные среды ОС, которые вы определяете на уровне ОС, и можете получить доступ с помощью
System.getenv()
Ответ 3
Совсем немного поздно для этой вечеринки, но я решил, что отправлю ответ, потому что этот вопрос появился для меня первым в Google. Я не уверен, что это сработало в тот момент, когда был задан вопрос, но с Spring 3.1 вы можете сделать это, используя абсолютный путь:
<context:property-placeholder location="file:///etc/myApp/myApp.conf"/>
Обратите внимание, что есть три косой черты. Первые два для протокола: "file://".
Ответ 4
Шаг-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);
Ответ 5
Вы можете поместить файл свойств в путь к классам и просто указать имя файла свойств.
Через java-код вы можете сделать это как это
Я предполагаю, что spring должен также проверять файл свойств в пути к классам.
Вы можете попробовать поместить файл свойств в путь к классам и указать только имя файла.
Ответ 6
Вы можете определить любую переменную как параметр контекста в Tomcat context.xml и использовать ее в applicationContext.xml, размещенном внутри войны.
Например, context.xml:
<Context>
<Parameter name="configlocation" value="/etc/application/my.properties" override="false"/>
</Context>
applicationContext.xml:
<beans ...>
<context:property-placeholder location="file:${configlocation}" ... />
</beans>