Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan @ConfigurationProperties dalam SpringBoot

Bagaimana untuk menggunakan @ConfigurationProperties dalam SpringBoot

王林
王林ke hadapan
2023-05-19 11:10:061419semak imbas

Tambah kebergantungan

Mula-mula kita perlu menambah kebergantungan Spring Boot:

org.springframework.boot ;artifactId>spring-boot-starter-parent

Contoh mudah

@ConfigurationProperties perlu digunakan bersama dengan @Configuration Kami biasanya mengkonfigurasinya dalam POJO:

@Data@Configuration@ConfigurationProperties(prefix = "mel") kelas awam. ConfigProperties { private String hostName; private int port; 🎜>#Simple propertiesmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

Padanan nama sifat Spring menyokong banyak format Seperti yang ditunjukkan di bawah, semua format boleh dipadankan dengan nama hos . Padanan:

mail.hostNamemail.hostnamemail.host_namemail.host-namemail.HOST_NAME

Jika anda tidak mahu menggunakan @Configuration, anda perlu mengimport fail konfigurasi secara manual dalam @ EnableConfigurationProperties anotasi seperti berikut:

@SpringBootApplication@EnableConfigurationProperties(ConfigProperties.class)kelas awam ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.}; >

Kami juga boleh Tentukan laluan ke fail Config dalam @ConfigurationPropertiesScan:

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config") kelas awam ConfigPropApp { public static void main(String[] args ) { SpringApplication.run(ConfigPropApp. class,args); }}

Dalam kes ini, program hanya akan mencari fail konfigurasi dalam pakej com.flydean.config.

Sarang atribut

Kita boleh sarang kelas, senarai, peta Mari kita ambil contoh di bawah dan buat POJO biasa dahulu:

Kelas @Datapublic. Bukti kelayakan { private String authMethod; private String username; private String password;}

Kemudian buat fail konfigurasi bersarang:

@Data@Configuration@ConfigurationProperties(prefix = "nestmail ")kelas awam NestConfigProperties { private String port; private String daripada; >

# sarang Simple propertiesnestmail.hostname=mailer@mail.comnestmail.port=9000nestmail.from=mailer@mail.com#List propertiesnestmail.defaultRecipients[0]=admin@mail.comnestmail.defaultRecipients[1] =owner@ mail.com#Map Propertiesnestmail.additionalHeaders.redelivery=trueenestmail.additionalHeaders.secure=true#Object propertiesnestmail.credentials.username=johnnestmail.credentials.password=passwordnestmail.credentials.authMethod=SHA1

Configuration@SHA1

@ConfigurationProperties juga boleh digunakan dengan @Bean seperti berikut:

@Datapublic class Item { private String name;}

Lihat cara menggunakannya:

@Data@Configurationpublic class BeanConfigProperties { @Bean @ConfigurationProperties(prefix = "item") public Item item() { return new Item( }}

Pengesahan Harta

@ConfigurationProperties boleh menggunakan format JSR-303 standard untuk pengesahan harta. Mari kita ambil contoh:

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail") kelas awam ConfigProperties { @NotEmpty private String hostName; @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$") Rentetan peribadi daripada;}

Jika hartanah kami tidak memenuhi syarat rayuan, pengecualian berikut mungkin berlaku:

Mengikat pada sasaran org.springframework.boot.context.properties.bind.BindException: Gagal mengikat sifat di bawah ' mail' ke com.flydean.config.ConfigProperties$$EnhancerBySpringCGLIB$$f0f87cb9 gagal: Harta: mail.port Nilai: 0 Sebab: Nilai minimum tidak boleh kurang daripada 1025 Harta: mail.hostName Nilai: null Sebab: Ia tidak boleh kosong Tindakan:Kemas kini konfigurasi aplikasi andaProses selesai dengan kod keluar 1

Penukaran atribut

@ConfigurationProperties juga menyokong penukaran atribut berbilang Di bawah kami mengambil Tempoh dan Saiz Data sebagai contoh:

Kami menentukan medan Dua Tempoh:

@ConfigurationProperties(prefix = "conversion") kelas awam PropertyConversion { private Duration timeInDefaultUnit; private Duration timeInNano; dalam medan fail sifat:

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

Kami melihat bahawa atribut di atas boleh mempunyai unit. Unit pilihan ialah: ns, us, ms, s, m, h dan d, masing-masing sepadan dengan nanosaat, mikrosaat, milisaat, saat, minit, jam dan hari. Unit lalai ialah milisaat. Kami juga boleh menentukan unit dalam anotasi:

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

Fail konfigurasi yang sepadan adalah seperti berikut:

conversion.timeInDays =2

Mari kita lihat cara menggunakan DataSize:

private DataSize sizeInDefaultUnit; private DataSize sizeInGB; @DataSizeUnit(DataUnit.TERABYTES)private DataSize sizeInTB;

conversion.sizeInDefaultUnit=300conversion.sizeInGB=2GBconversion.sizeInTB=4

Datasize menyokong B, KB, MB, GB dan TB.

Penukar Tersuai

But Musim Bunga yang sama turut menyokong penukar atribut tersuai. Kami mula-mula mentakrifkan kelas POJO:

Pekerja kelas awam { private String name;

Fail harta yang sepadan:

conversion.employee=john,2000

Kami perlu melaksanakan sendiri kelas penukaran antara muka Penukar:

@Component@ConfigurationPropertiesBindingpublic class EmployeeConverter melaksanakan Converter { @Override public Employee convert(String from) { String [] data = from.split(","); kembalikan Pekerja baharu(data[0], Double.parseDouble(data[1]));

Atas ialah kandungan terperinci Bagaimana untuk menggunakan @ConfigurationProperties dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam