Spring4.0.7を使用するSpringboot1.1.8を使用しています。 @Valueアノテーションを使用してクラスのプロパティを自動配線しています。プロパティがプロパティファイルに存在しない場合はデフォルト値にしたいので、「:」を使用してデフォルト値を割り当てます。以下に例を示します。
@Value("${custom.data.export:false}")
private boolean exportData = true;
プロパティがプロパティファイルに存在しない場合は、変数にfalseを割り当てる必要があります。ただし、ifプロパティがファイルに存在する場合は、デフォルト値が割り当てられ、プロパティ値は無視されます。例えば。上記のようなプロパティを定義し、アプリケーションのプロパティファイルに次のようなものがある場合custom.data.export=true
then、exportData
の値はstill falseになりますが、理想的にはtrueである必要があります。
誰かが私がここで間違っていることを私に教えてもらえますか?
ありがとう
まったく同じ症状の次の春のバグに噛まれました。
[SPR-9989]複数のPropertyPlaceholderConfigurerを使用すると、@ Valueのデフォルト値の動作が中断されます
基本的に、ApplicationContextに複数のPropertyPlaceholderConfigurer
が存在する場合、事前定義されたデフォルトのみが解決され、オーバーライドは行われません。別のignoreUnresolvablePlaceholders
値を設定しても問題に影響はなく、余分なPropertyPlaceholderConfigurer
を削除すると、両方の値(true/false)が同じように機能しました。
調べてみると、定義された各PropertyPlaceholderConfigurer
は期待どおりにプロパティを内部的に解決しましたが、Springは、@Value
アノテーション付きフィールド/パラメータに値を挿入するために使用するプロパティを特定できませんでした。 。
これを克服するには、次のいずれかを実行できます。
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="valueSeparator" value="-defVal-"/>
</bean>
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="order" value="-2147483648"/>
</bean?
私はこの問題についていくつかのRnDを行いました ここで入手可能 。
@Ophir Radnitzが述べたように、これは、ApplicationContextに複数のPropertyPlaceholderConfigurerが存在する場合に発生する春のバグです。
回避策として、次のような方法で目的の動作を取得できます。
(...)
@Autowired
private Environment environment;
(...)
private Boolean shouldExportData()
{
return environment.getProperty( "custom.data.export", Boolean.class, Boolean.FALSE );
}