Импорт файлов свойств 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" />
Другие вопросы по тегам