Подтвердить что ты не робот

Ссылаясь на конфигурацию .properties вне .war

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

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

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

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

заблаговременно.

4b9b3361

Ответ 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>