2016-11-14 4 views
1

Я установил мой оракул переменного окружение свойства в файле свойств следующим образом:среда Переменный перекрываться с аннотацией Spring Value

oracle.home=XXX 
file.path=C:\workspace 

Я использую весной завод боб аннотацию, и я заявляю оракул Home следующим образом в классе:

@Value("${oracle.home}") private String oracleHome; //becomes YYY 

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

Почему это происходит и как я могу это решить?

+0

Я не понимаю. У вас есть файл свойств, загруженный с помощью 'oracle.home', и у вас также есть системное свойство' oracle.home'? –

+0

приложение читает в системе ORACLE_HOME env вместо того, что я установил в файле свойств. У меня есть две версии оракула. – user2781389

+0

Я не знаю, как 'ORACLE_HOME' переводит на' oracle.home'. Весна может иметь несколько источников свойств. Они упорядочены. Я считаю, что свойства системы и свойства среды упорядочены первыми. После этого упорядочиваются ваши пользовательские файлы '.properties'. Должен быть способ быть явным в порядке. –

ответ

1

Переменные среды ОС рассматриваются в более высоком порядке, чем файл .properties. Большинство операционных систем запрещают имена ключей, разделенных периодами, поэтому весна автоматически сопоставляет ваше имя proprety от ORACLE_HOME до oracle.home. Вы можете прочитать здесь:

Properties considering order

1

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

есть 3 значения, доступных

  • SYSTEM_PROPERTIES_MODE_FALLBACK - Проверка свойств системы, если не разрешаемых в указанных свойствах.
  • SYSTEM_PROPERTIES_MODE_NEVER - Никогда не проверяйте свойства системы.
  • SYSTEM_PROPERTIES_MODE_OVERRIDE - сначала проверьте свойства системы, прежде чем попробует указанные свойства.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

<context:property-placeholder location="classpath:foo.properties"> 
<property name="systemPropertiesModeName"> 
    <value>SYSTEM_PROPERTIES_MODE_NEVER</value> 
</property> 
</context> 

или

 @Bean 
     public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
      PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer(); 
      p.setLocation("..") 
      p.setSystemPropertiesMode(SYSTEM_PROPERTIES_MODE_NEVER); 
      return p; 
     } 
Смежные вопросы