поиск свойства с помощью заполнителя свойств Spring и Webapp - PullRequest
2 голосов
/ 24 июня 2011

Это "простая" проблема, и я ищу как-как-то-то и / или ты-глупый-не-делай-то. Я открыт для обоих.

Я создаю файл войны и хочу, чтобы структура была:

WEB-INF/
  properties/
    <my properties files>
  classes/
    ...
  spring/
    <my spring files>

Это глупо? Я знаю, что могу получить доступ к файлам свойств через свойство-заполнитель, но я бы предпочел не вкладывать свойства в раздел классов - для меня это не имеет смысла.

Итак, файл Spring выглядит так:

<context:property-placeholder location="classpath:properties/*.properties" />

если я хочу получить к ним доступ в области классов. Я думал, что

<context:property-placeholder location="properties/*.properties" />

позволил бы мне просто поместить каталог в WEB-INF напрямую ... я не прав (ps я думаю, что я :)).

Любой совет?

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Это должно работать

<context:property-placeholder location="WEB-INF/properties/*.properties" />

WEB-INF не является корнем веб-приложения, поэтому вам необходимо добавить WEB-INF к пути.

spring-context-3.1.xsd

<xsd:attribute name="location" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
<![CDATA[ 
    The location of the properties file to resolve placeholders against, as a Spring
    resource location: a URL, a "classpath:" pseudo URL, or a relative file path.
    Multiple locations may be specified, separated by commas. If neither location nor properties-ref is
    specified, placeholders will be resolved against system properties.


  ]]> 
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
2 голосов
/ 24 июня 2011

Вы не можете делать это так, как хотите, поскольку путь к классам для Classloader будет каталогом / classes и любыми jar-файлами в каталоге / lib.Это стандартная конфигурация для файла войны.

Войны и уши имеют определенные конфигурации, которые вы должны соблюдать, чтобы файлы были действительными.Если подумать об этом, было бы затруднительно, чтобы разные поставщики предоставляли веб-контейнеры, которые могли бы развертывать один и тот же файл войны, если бы не было стандартного формата.Здесь есть довольно информативная страница .

Чтобы достичь чего-то похожего на то, что вы хотите, вы можете просто иметь каталоги / classes / properties и / classes / spring и искать их соответствующим образом изваш classpath ("classpath: properties / myfile.properties).

0 голосов
/ 24 июня 2011

Я не уверен, чего вы хотите достичь.Вот метод, который я использую для добавления свойств из файла базовых свойств в bean-компонент:

В файлах Spring (определения bean-компонентов XML) я добавляю ссылку на свой файл свойств (myfile.properties):

<bean id="propertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="classpath:myfile.properties" />
</bean> 

и затем я добавляю свои ссылки на свойства (db.url - это URL-адрес для моего соединения с базой данных, я сохранил только свойства bean-компонентов, на которые есть ссылка в моем файле свойств).

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <!-- results in a setDriverClassName(String) call -->
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url"><value>${db.url}</value></property>
    <property name="username"><value>${db.login}</value></property>
    <property name="password"><value>${db.password}</value></property>

</bean>

По умолчанию, если свойство не определено в файле свойств, Spring использует системные свойства (это поведение можно изменить).

...