2

構成プロパティ クラスはクラス内で使用できるはず@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それを機能させる唯一の方法は、文字列のように注釈が付けられたメソッド引数を使用することです。

これは予想される動作ですか、それともバグですか?

4

1 に答える 1