web-dev-qa-db-ja.com

Spring @Valueアノテーション付きメソッド、プロパティが利用できない場合はデフォルト値を使用

状況

。propertiesファイルのプロパティを@ Valueで注釈されたフィールドに注入しています。ただし、このプロパティは機密情報を提示するため、リポジトリから削除します。誰かがプロジェクトを実行する必要があり、デフォルト値がフィールドに設定される資格情報を含む.propertiesファイルがない場合でも、私はそれを望みます。

問題

フィールド自体にデフォルト値を設定しても、.propertiesファイルが存在しない場合は例外が発生します。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx': Injection of autowired dependencies failed; nested exception is Java.lang.IllegalArgumentException: Could not resolve placeholder 'secret' in string value "${secret}"

これが注釈付きフィールドです:

 @Value("${secret}")
 private String ldapSecret = "secret";

この場合、プレーンな文字列「secret」のみが設定されると予想していました。

10
RenatoIvancic

あなたの質問に正確に答えるために...

@Value("${secret:secret}")
private String ldapSecret;

そして、例を完全にするために、さらにいくつかのバリエーションを以下に示します...

デフォルトの文字列をnullに:

@Value("${secret:#{null}}")
private String secret;

デフォルトの数値:

@Value("${someNumber:0}")
private int someNumber;
11
Bernie Lenz

ただ使用する:

@Value("${secret:default-secret-value}")
private String ldapSecret;
@Value and Property Examples
To set a default value for property placeholder :

${property:default value}
Few examples :

//@PropertySource("classpath:/config.properties}")
//@Configuration

@Value("${mongodb.url:127.0.0.1}")
private String mongodbUrl;

@Value("#{'${mongodb.url:172.0.0.1}'}")
private String mongodbUrl;

@Value("#{config['mongodb.url']?:'127.0.0.1'}")
private String mongodbUrl;
0
Ahmet Karakaya