Как вызвать файл свойств из другого файла свойств, используя Spring PropertyPlaceholderConfigurer? - PullRequest
1 голос
/ 07 марта 2012

Я работаю над Java-приложением из командной строки, используя Spring.У меня есть несколько файлов свойств, хранящихся в разных местах, и один файл свойств, содержащий путь для всех этих свойств.Я использую PropertyPlaceholderConfigurer, чтобы прочитать свойства, содержащие расположения различных файлов свойств.Я не уверен в лучшем способе обработки нескольких свойств.

Приложение работает следующим образом: я передам путь для первого файла свойств с помощью команды JVM -Dmypath = parent.properties.Файл свойств будет выглядеть следующим образом:

child1=/location1/child1.properties

child2=/location2/child2.properties

и т. Д.

Конфигурация свойств моего родителя выглядит следующим образом:

<bean id="parentProperty" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>                
            <value>${mypath}</value>
        </list>
    </property>
</bean>

Конфигурация child1 выглядит так:

<bean id="child1Property" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>                
            <value>${child1}</value>
        </list>
    </property>
</bean>

Теперь, когда я вызываю child1, он не загружает свойства.

Ответы [ 3 ]

1 голос
/ 12 октября 2015

Сначала я загружаю родительский файл свойств, а затем задаю конкретную переменную child1 и child2 в системной переменной среды и загружаю из системной переменной среды. и работает нормально.

код:

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

<bean id="systemPrereqs" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
            <!-- The new Properties -->
            <util:properties>
                <prop key="LOG_LOCATION">${log.location}</prop>
                <prop key="child1">${child1}</prop>
            </util:properties>
        </property>
    </bean>

<context:property-placeholder location="file:#{systemProperties['child1']}/*.sql" ignore-unresolvable="true" />
0 голосов
/ 08 марта 2012

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

<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</value>
        </list>
    </property>
</bean>
0 голосов
/ 07 марта 2012

Порядок выполнения BeanFactoryPostProcessors, например PropertyPlaceholderConfigurer, можно установить, установив свойство "order" (см. Упорядочено ).Установив приоритет выполнения на parentProperty выше, чем child1Property, вы можете убедиться, что parentProperty запускается первым, настроив значение ${child1}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...