2012-01-18 2 views
1

я пытаюсь загрузить файл свойств из переменной окружения, так вот что я пробовал:propertyPlaceHolderConfigurer и environement переменная

<bean id="propertyPlaceholderConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 

       <value>classpath:messages/application.properties</value> 
       <value>file:${My_ENV_VAR}/*.properties</value> 

      </list> 
     </property> 

     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="searchSystemEnvironment" value="true" /> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 

    </bean> 

У меня есть новая переменная среды с именем My_ENV_VAR=C:\Program Files\My Folder\props.properties , но при остановке и запуске приложения на значение переменной не задано, любые идеи почему?

UPDATE: Требование

я хочу прочитать свойства Hibernate (URL, имя пользователя, пароль) в applicationContext.xml из внешнего файла свойств в файловой системе, которая его путь хранится в переменная среды.

+0

знакомства Bozho здесь: http://stackoverflow.com/questions/3965446/how-to-read-system-environment-variable-in-spring-applicationcontext – atrain

+0

Как вы знаете, что он не установлен? Также вы должны передать файл/файл, как 'file: $ {My_ENV_VAR}/*. Properties', а не каталог. – mrembisz

+0

Извините, я обновил сообщение, я знаю, что он не установлен, потому что после сборки я вижу applicationContext, и я вижу, что значение ' файл: $ {My_ENV_VAR}' не изменяется. –

ответ

8

Вы пытаетесь использовать PropertyPlaceholderConfigurer, чтобы создать PropertyPlaceholderConfigurer. Это проблема с курицей/яйцом, она не может работать!

Попробуйте вместо этого использовать язык выражений (см. this section), но в вашем случае это сложно, потому что вы хотите смешивать статический и динамический контент. Возможно, что-то, как это будет работать:

<property name="locations" 
    value="classpath:messages/application.properties, 
    #{ T(java.lang.System).getenv('MY_ENV_VAR')}" /> 
    <!-- changed method name, it's getenv(), not getEnv() --> 
+0

извините, я не понимаю, я хочу, чтобы свойство placeholder указывало на файл свойства, значение которого читать из переменной среды, такая вещь не выполнима? –

+0

Я добавил обновление для требования, если есть другое решение для того, что я пытаюсь сделать. –

+0

@fresh_dev Дело в том, что вы используете синтаксис PropertyPlaceholderConfigurer во время его создания. –

1

Yo должно быть использование таким образом:

Сначала объявляют весенний боб

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

Теперь в каталоге WEB-INF/classes создать файл config.properties и поместить его :

jboss.variable=${jboss.modules.dir} 

Примечание: при развертывании JBoss 6 EAP журнал показывает мне:

jboss.modules.dir = C:\Java\jee-container\jboss-eap-6.1\modules 

и использовать переменную в контексте файла приложения:

<bean id="nameOfBean" 
    class="com.moeandjava.pusku.MySpringBean"> 
    <property name="path" value="${jboss.variable}" /> 
</bean> 

Извините за мой плохой английский ответ