Импорт файлов свойств Spring из файла jar в classpath
Я хочу импортировать все файлы свойств, заканчивающиеся на .properties
которые содержатся в src/main/resource
местоположения ВСЕХ jar-зависимостей моего проекта.
Я написал тест JUnit, где мой context.xml находится в папке src/test/resources. Я указал свойство-заполнитель с использованием подстановочных знаков, но оно не работает.
<context:property-placeholder location="classpath*:*.properties"/>
Может быть, я идиот, но не смог найти решение своей проблемы в сети. Кто-нибудь здесь знает, какой правильный синтаксис?
РЕДАКТИРОВАТЬ:
Корневой проект имеет maven-зависимости, которые разрешаются из моей рабочей области:
И я хочу импортировать файлы module.properties зависимых проектов:
3 ответа
Из документации Spring:
Префикс " classpath*:" также можно комбинировать с шаблоном PathMatcher в оставшейся части пути к местоположению, например " classpath*:META-INF/*-beans.xml". [...]
Но есть ограничение:
Обратите внимание, что " classpath*:" в сочетании с шаблонами в стиле Ant будет надежно работать только с хотя бы одним корневым каталогом до запуска шаблона, если только фактические целевые файлы не находятся в файловой системе. Это означает, что шаблон типа "classpath *: *. Xml" не будет извлекать файлы из корня файлов JAR, а только из корня расширенных каталогов. [...]
Поэтому, если я размещу файлы свойств моего модуля в src/main/resources/META-INF, я могу загрузить их следующим образом:
<context:property-placeholder location="classpath*:/META-INF/*.properties" />
Вы также можете сделать это вот так:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:your.properties</value>
<value>classpath*:your.properties</value>
.....
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
более сложный пример:
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="locations">
<list>
<value>classpath*:properties/defaults.properties</value>
<value>classpath*:properties/${props.env.name}.properties</value>
<value>classpath*:com/calciuum/config/defaults.properties</value>
<value>classpath*:com/calciuum/config/${props.env.name}.properties</value>
<value>classpath*:${props.env.classpath}/defaults.properties</value>
<value>classpath*:${props.env.classpath}/${props.env.name}.properties</value>
<value>file:${props.env.ext.properties}</value>
</list>
</property>
</bean>
Если свойства, которые вы используете, меньше 4. Вы можете использовать это:
<context:property-placeholder location="classpath:test1.properties,classpath:test2.properties" />
Остальное использую это
<context:property-placeholder location="classpath:*.properties" />