Bagaimana cara menggunakan @ConstructorBinding dan @PropertySource bersama dengan @ConfigurationProperties di Spring Boot 2.2.4?

Saya baru mengenal Boot Musim Semi. Saat ini, saya mencoba membuat kelas POJO (SystemProperties.class) untuk membaca nilai dalam file properti (parameter.properties terpisah dari application.properties tetapi masih di bawah direktori yang sama /src/main/resources. Masalah terjadi ketika saya menggunakan @ConstructorBinding di kelas agar tidak dapat diubah.

  • @ConstructorBinding perlu digunakan dengan @EnableConfigurationProperties atau @ConfigurationPropertiesScan.
  • @ConfigurationPropertiesScan akan mengabaikan anotasi @Configuration yang diperlukan saat menggunakan @PropertySource untuk menentukan file
    *.properties eksternal.

A) SystemProperties.kelas

@Configuration
@PropertySource("classpath:parameter.properties")

@ConstructorBinding
@ConfigurationProperties(prefix = "abc")
public class SystemProperties {

    private final String test;

    public SystemProperties (
            String test) {
        this.test = test;
    }

    public String getTest() {
        return test;
    }

B) parameter.properti

abc.test=text1

Saya telah mencoba menghapus anotasi @PropertySource tetapi nilainya tidak dapat diambil kecuali dari properti aplikasi. Bantuan apa pun sangat dihargai!


person Richard67    schedule 25.02.2020    source sumber


Jawaban (1)


Cara mengatasinya adalah dengan membagi kelas menjadi dua kelas dengan dua permasalahan yang berbeda. Dengan solusi seperti itu, Anda mempertahankan kelas SystemProperties yang Anda buat dan menambahkan kelas lain hanya untuk memuat parameter file properti agar tersedia untuk aplikasi Anda.

Solusinya adalah sebagai berikut:

@ConstructorBinding
@ConfigurationProperties(prefix = "abc")
public class SystemProperties {

    private final String test;

    public SystemProperties(
            String test) {
        this.test = test;
    }

    public String getTest() {
        return test;
    }
}

Perhatikan bahwa saya telah menghilangkan anotasi @Configuration dan @PropertySource.

@Configuration
@PropertySource("classpath:parameter.properties")
public class PropertySourceLoader {
}

Perhatikan saya baru saja menambahkan anotasi ini pada kelas baru, semata-mata dibuat untuk memuat file properti.

Terakhir, Anda dapat menambahkan @ConfigurationPropertiesScan pada kelas aplikasi utama Anda untuk mengaktifkan mekanisme pemetaan properti.

person Yonatan Wilkof    schedule 25.02.2020
comment
Jawaban bagus. Ini membantu saya dalam kasus yang sedikit berbeda namun serupa. Artikel ini juga mungkin bermanfaat: baeldung.com/spring-enable-config-properties - person luke; 31.12.2020