Внешние свойства контекста приложения Spring? - PullRequest
29 голосов
/ 25 ноября 2011

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

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

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

Редактировать: ThxПока 4 комментария.

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

Ответы [ 7 ]

47 голосов
/ 29 ноября 2011

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

<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/

Кстати, очень полезно сообщение в блоге .

12 голосов
/ 25 ноября 2011

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

  <context:property-placeholder location="file:///C:/Applications/external/external.properties"/>
11 голосов
/ 25 ноября 2011
<context:property-placeholder location="classpath*:spring/*.properties" />

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

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

, это будет указывать на web-inf /классы / конфигурации / springcontext.properties

10 голосов
/ 07 ноября 2012

Этот блог может помочь вам. Хитрость заключается в том, чтобы использовать SpEL (язык пружинных выражений) для чтения системных свойств, таких как user.home, для чтения домашнего каталога пользователя с использованием SpEL, вы можете использовать
#{ systemProperties['user.home']} выражение внутри элементов вашего компонента. Например, чтобы получить доступ к вашему файлу свойств, хранящемуся в вашем домашнем каталоге, вы можете использовать следующее в свойстве 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>
6 голосов
/ 30 сентября 2013

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

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

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

    PROVIDER_URL=t3://localhost:8003,localhost:8004
    
  2. 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} заменено значением в свойствах файла

2 голосов
/ 25 ноября 2011

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

1 голос
/ 21 сентября 2017
<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

У меня оба работают

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