構成プロパティ クラスはクラス内で使用できるはず@Configuration
です。
環境
- スプリング ブート 2.0.2
- Java バージョン "10.0.1" 2018-04-17 Java(TM) SE Runtime Environment 18.3 (ビルド 10.0.1+10)、Java HotSpot(TM) 64 ビット Server VM 18.3 (ビルド 10.0.1+10、混合モード) )
- OS X 10.13.4
マイコード
application-local.properties:
s3.bucketName=test-bucket
構成プロパティ
@Validated
@ConfigurationProperties(prefix = "s3")
public class S3ConfigurationProperties {
@NotBlank
private String bucketName;
public String getBucketName() {
return bucketName;
}
public void setBucketName(final String bucketName) {
this.bucketName = bucketName;
}
}
構成クラス
@Configuration
@Profile("local")
@EnableConfigurationProperties(S3ConfigurationProperties.class)
public class LocalS3Configuration {
@Autowired
private S3ConfigurationProperties properties;
@Value("${s3.bucketName}")
private String bucket;
@Bean(destroyMethod = "shutdown")
public AmazonS3 amazonS3(@Value("${local.s3.endpoint}") final String s3Endpoint, @Value("${s3.bucketName}") final String bucketName) {
// use properties...
final String bucketInjectedToMethod = bucketName; // works
final String bucketInjectedViaProperties = properties.getBucketName(); // null
final String bucketInjectedInClass = bucket; // null
}
}
観察された行動
S3ConfigurationProperties
を構成クラスにフィールドとして、またはメソッドへの引数として注入するとamazonS3
、インスタンスはnon-null
になりますが、その中のbucketName
プロパティは になりますnull
。
経由@Value
でクラスに文字列を注入することもnull
.
@Value
それを機能させる唯一の方法は、文字列のように注釈が付けられたメソッド引数を使用することです。
これは予想される動作ですか、それともバグですか?