2016-11-14 20 views
1

設置我的Oracle環境變量屬性在屬性文件,如下所示:環境變量進行重寫同春價值詮釋

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

我使用彈簧廠豆註釋和我宣佈Oracle主作爲一類如下:

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

我所有的其他財產被正確讀取,但oracleHome被重寫與我在我的環境(如ORACLE_HOME)已設置,而不是從屬性文件中讀取..

爲什麼會發生這種情況,我該如何解決這個問題?

+0

我不明白。你有一個用'oracle.home'加載的屬性文件,你也有一個名爲'oracle.home'的系統屬性? –

+0

應用程序讀取ORACLE_HOME系統env而不是我在屬性文件中設置的內容。我有兩個版本的oracle主頁。 – user2781389

+0

我不知道'ORACLE_HOME'如何轉換爲'oracle.home'。 Spring可以有多個屬性來源。這些都是有序的。我相信系統屬性和環境屬性是首先排序的。您的自定義'.properties'文件在此之後進行排序。應該有一種方法可以在命令中明確。 –

回答

1

OS環境變量的考慮順序高於.properties文件。 大多數操作系統不允許使用句點分隔的鍵名,所以spring會自動將您的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; 
     }