2016-04-06 14 views
0

私は私のJavaコード内のプロパティの次のような定義している:私は、XML設定ファイルでもSpring Valueのデフォルト値がNULLエラーを防止しないのはなぜですか?

import org.springframework.beans.factory.annotation.Value; 
... 
@Value("#{sdProperties['is.test.server'] ?: false }") 
private boolean isTestServer = false; 

を持っている:

<util:properties id="sdProperties"> 
    <prop key="sdzootest.server.url">${sdzootest.server.url}</prop> 
    <prop key="is.test.server">${is.test.server}</prop> 
</util:properties> 

をそれでも、is.test.serverが指定されていない場合、私はエラーを取得しています

2016年4月6日15:52:00161 [ローカルホスト-startStop-1] ERROR com.elasticpath.web.context.impl.EpContプロパティファイルでextConfigListener:69 - キャッチ 例外です。 org.springframework.beans.factory.BeanDefinitionStoreException:ヌルで定義された名前を持つsdProperties 無効Bean定義: 文字列値 にプレースホルダ 'is.test.server' を解決できませんでした "$ {is.test.server}"

+0

私はあなたが '<="であるキー小道具のデフォルト値を必要とすると思います。 test.server "> $ {is.test.server}'です。 ' $ {is.test.server:default}' –

答えて

1

PlaceholderConfigurerSupportは、コンフィギュラは、プレースホルダを解決できない場合は、 BeanDefinitionStoreExceptionがスローされますignoreUnresolvablePlaceholders

特殊な性質を持っています。複数のプロパティファイルに対して をチェックする場合は、 ロケーションプロパティを使用して複数のリソースを指定します。複数のコンフィグラーを定義することもできます。それぞれのコンフィグレーターは、独自のプレースホルダ構文を持つ です。 ignoreUnresolvablePlaceholdersを使用すると、 は、プレースホルダが を解決できない場合に、意図的に例外をスローするのを抑制します。

どのようにセットアッププレースホルダのサポートは、いくつかのオプションので、ここでは、明確ではありません。

<context:property-placeholder 
     ignore-unresolvable="true" 
     location="classpath:app.properties"/> 

または

@Bean 
public PropertySourcesPlaceholderConfigurer ppc() { 
    PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer(); 
    ppc.setIgnoreUnresolvablePlaceholders(true); 
    return ppc; 
} 
+0

設定ファイルにcontext-property-placeholderを追加しようとしました。私はsd.propertiesとapp.propertiesの両方を試しました。第2の提案について - それは@Configurationファイル内にあるべきですか? –

+0

@AlexNarinskyはい、メソッドは '@ Configuration'アノテーションのクラスになければなりません – Evgeny

関連する問題