2016-11-14 11 views
1

で上書きされ、次のように私は、プロパティファイルには、My 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を読み込みます。私は2つのバージョンのOracleホームを持っています。 – user2781389

+0

'ORACLE_HOME'が' oracle.home'にどのように変換されるのかわかりません。 Springは複数のプロパティー・ソースを持つことができます。これらは注文されます。私は、システムのプロパティと環境のプロパティが最初に注文されると信じています。あなたのカスタム '.properties'ファイルはそれ以降に整理されます。順序を明示する方法があるはずです。 –

答えて

1

OS環境変数は、.propertiesファイルよりも上位とみなされます。 ほとんどのオペレーティング・システムでは、ピリオドで区切られたキー名を使用できないため、springは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; 
     }