最初は、次の仕様があります。
@Value("#{props.isFPL}")
private boolean isFPL=false;
これは正常に機能し、プロパティファイルから値を取得します。
isFPL = true
ただし、デフォルトの次の式はエラーになります。
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
式の解析に失敗しました;ネストされた例外はorg.springframework.expression.spel.SpelParseExceptionです:EL1041E:(pos 28):有効な式を解析した後、式にまだデータがあります: 'colon(:)'
また、#の代わりに$を使用しようとしました。
@Value("${props.isFPL:true}")
private boolean isFPL=false;
アノテーションのデフォルト値は正常に機能しますが、プロパティファイルから正しい値を取得できませんでした。
次のように$で試してください
@Value("${props.isFPL:true}")
private boolean isFPL=false;
また、プロパティファイルが見つからない場合はデフォルト値が使用されるように、ignore-resource-no-foundをtrueに設定してください。
また、次のものを-
xmベースの構成を使用する場合のコンテキストファイル:
<context:property-placeholder ignore-resource-not-found="true"/>
構成クラスでJava構成を使用する場合:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setIgnoreResourceNotFound(true);
return p;
}
int
型変数の場合:
@Value("${my.int.config: #{100}}")
int myIntConfig;
注:コロンの前にスペースはありませんbeforeコロンがありますが、余分なスペースafterコロン。
Springアプリケーションコンテキストファイルには、以下のような複数のpropertyPlaceholder Beanが含まれていますか?
<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />
その場合、次のプロパティルックアップ:props.isFPLは、最初のプロパティファイル(。local.properties)に対してのみ行われ、プロパティが見つからない場合はデフォルト値( true)が有効になり、このプロパティの2番目のプロパティファイル(config.properties)は事実上無視されます。
Stringの場合、デフォルトで次のようにnullに設定できます。
public UrlTester(@Value("${testUrl:}") String url) {
this.url = url;
}
次のようなものを使用する場合、プロパティのロード方法に依存します
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
その後、@Value
は次のようになります
@Value("${isFPL:true}")