2011-11-25 8 views
23

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

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

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

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

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

+0

Try с особой 'location', хотя' locations' должно сработать. Также попробуйте удалить ведущий '/' из ссылки на classpath. –

+0

Кто-нибудь может помочь по новому вопросу? –

+0

@DennisIch Как вы в конечном итоге это исправили? Я столкнулся с аналогичным вопросом – happybuddha

ответ

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

Если вы поместите его где-то в пути к классам в директории с именем весной (изменить название/каталоги соответственно), вы можете получить доступ с выше

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

это будет указывать на веб-INF/классы /config/springcontext.properties

+0

его не веб-приложение его автономно с некоторыми функциями командной строки и для этого мне нужно это за пределами банки. –

+0

Ну, тогда он находится рядом с вашим файлом jar, если он не является веб-проектом. – fmucar

2

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

+0

Кажется, что «владелец-заполнитель» Spring не способен загружать файлы свойств за пределами пакета, где определен контекст приложения (см. Http://forum.springsource.org/showthread.php?87994-Classpath*-in- контекст-свойство-заполнитель-оленья кожа-подборщик системы и путь к классам р = 295698 # post295698). Как вы достигли загрузки внешних файлов свойств? –

+0

Вы пытались добавить его в файл манифеста? – pap

+1

Умм ... добавление в файл манифеста? Файл 'MANIFEST.MF' находится внутри пакета, так как он может помочь? –

11

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

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

Также работает как свойство 'location'' PropertyPlaceholderConfigurer' –

43

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

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

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

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

BTW, очень полезно blog post.

9

This блог может вам помочь. Фокус в том, чтобы использовать SpEL (язык выражений выражения), чтобы прочитать свойства системы, такие как 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

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

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

  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} получил подставляется значение в свойствах файла

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

Это работает для меня. Локальный путь развития машина C: \ Apps \ Tomcat \ ATH \ ath_conf и в сервере/приложений/TOMCAT/АТН/ath_conf

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

Смежные вопросы