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

Spring внешние свойства контекста приложения?

У меня есть приложение Spring и его работоспособность до сих пор. Теперь я хочу, чтобы файл свойств во внешней папке конфигурации, а не в упакованном банке, менял вещи без необходимости переупаковки. Это то, что я получил:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- <property name="locations" value="classpath:/springcontext.properties"/>  -->
<property name="locations" value ="config/springcontext.properties" />

Выделенный один работает, а другой - я не работаю:/Может кто-нибудь помочь?

Изменить: спасибо 4 комментариев.

Возможно, мой вопрос не был достаточно ясным:). Я выполняю сборку Maven, и все будет упаковано, и я хочу, чтобы эта папка была НЕ в гайке упаковки рядом с выходящей банкой, и в этой папке я хочу файл свойств. возможно?

4b9b3361

Ответ 1

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

Если вы поместите его где-нибудь в путь к классам в каталоге с именем spring (соответственно измените имена /dirs ), вы можете получить доступ с помощью выше

<property name="locations" value ="config/springcontext.properties" />

это будет указывать на web-inf/classes/config/springcontext.properties

Ответ 2

Вы можете попробовать что-то вроде этого:

<context:property-placeholder 
        location="${ext.properties.dir:classpath:}/servlet.properties" />

И определите свойство ext.properties.dir на вашем сервере приложений /jvm, в противном случае будет использоваться свойство свойств по умолчанию "classpath:/" (т.е. класс dir.jar или .war):

-Dext.properties.dir=file:/usr/local/etc/

BTW, очень полезный пост в блоге.

Ответ 3

Вы можете использовать префикс файла для загрузки файла контекста внешнего приложения.

  <context:property-placeholder location="file:///C:/Applications/external/external.properties"/>

Ответ 4

Этот блог может вам помочь. Фокус в том, чтобы использовать язык выражений SpEL (spring), чтобы прочитать свойства системы, такие как user.home, чтобы прочитать домашний каталог пользователя с помощью SpEL, вы могли бы использовать выражение
#{ systemProperties['user.home']} внутри ваших элементов bean. Например, чтобы получить доступ к вашему файлу свойств, хранящемуся в вашем домашнем каталоге, вы можете использовать следующее в свой PropertyPlaceholderConfigurer, это сработало для меня.

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:#{ systemProperties['user.home']}/ur_folder/settings.properties</value>
    </property>
</bean>

Ответ 5

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

Это то, что сработало для меня.

  • Содержимое файла свойств:

     
    PROVIDER_URL=t3://localhost:8003,localhost:8004
    
  • applicationContext.xml содержимое файла: (Spring 3.2.3)

    Примечание: ${user.home} является системным свойством от ОС.

    <context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/>
    
    <bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                <prop key="java.naming.provider.url">${PROVIDER_URL}</prop>
            </props>
        </property>
    </bean>
    

${PROVIDER_URL} было заменено значением в свойствах файла

Ответ 6

Один из способов сделать это - добавить свою внешнюю конфигурационную папку в путь к классам Java-процесса. То, как я часто делал это в прошлом.

Ответ 7

<context:property-placeholder location="file:/apps/tomcat/ath/ath_conf/pcr.application.properties" />

Это работает для меня. Локальный путь машины разработки - C:\apps\tomcat\ath\ath_conf и в server/apps/tomcat/ath/ath_conf

Оба работают для меня