Memasukkan Peta dari File YAML dengan Spring

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat lebih dekat bagaimana menyuntikkan peta dari file YAML di Spring Boot .

Pertama, kita akan mulai dengan sedikit wawasan tentang file YAML di Spring Framework. Kemudian, kami akan memamerkan, melalui contoh praktis, cara mengikat properti YAML ke Peta .

2. File YAML dalam Kerangka Musim Semi

Menggunakan file YAML untuk menyimpan data konfigurasi eksternal adalah praktik umum di antara developer Spring. Pada dasarnya, Spring mendukung dokumen YAML sebagai alternatif properti dan menggunakan SnakeYAML di bawah tenda untuk menguraikannya .

Tanpa basa-basi lagi, mari kita lihat seperti apa tampilan file YAML:

server: port: 8090 application: name: myapplication url: //myapplication.com

Seperti yang bisa kita lihat, file YAML cukup jelas dan lebih mudah dibaca manusia. Faktanya, YAML menyediakan cara yang menarik dan ringkas untuk menyimpan data konfigurasi hierarki.

Secara default, Spring Boot membaca properti konfigurasi dari application.properties atau application.yml saat memulai aplikasi. Namun, kita dapat menggunakan @PropertySource untuk memuat file YAML kustom.

Sekarang kita sudah familiar dengan apa itu file YAML, mari kita lihat bagaimana memasukkan properti YAML sebagai Map di Spring Boot.

3. Cara Menyuntikkan Peta dari File YAML

Spring Boot telah membawa eksternalisasi data ke level berikutnya dengan memberikan anotasi praktis yang disebut @ConfigurationProperties. Anotasi ini diperkenalkan untuk dengan mudah memasukkan properti eksternal dari file konfigurasi langsung ke objek Java .

Di bagian ini, kita akan membahas secara mendalam cara mengikat properti YAML ke dalam kelas kacang menggunakan anotasi @ConfigurationProperties .

Pertama, mari kita definisikan beberapa properti nilai kunci di application.yml :

server: application: name: InjectMapFromYAML url: //injectmapfromyaml.dev description: How To Inject a map from a YAML File in Spring Boot config: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 filesystem: - /dev/root - /dev/md2 - /dev/md4 users: root: username: root password: rootpass guest: username: guest password: guestpass

Dalam contoh ini, kami akan mencoba memetakan aplikasi menjadi Peta sederhana . Demikian pula, kami akan memasukkan detail konfigurasi sebagai Peta , dan pengguna sebagai Peta dengan kunci String dan objek yang termasuk dalam kelas yang ditentukan pengguna - Kredensial - sebagai nilai .

Kedua, mari buat kelas kacang - ServerProperties - untuk merangkum logika pengikatan properti konfigurasi kita ke Peta :

@Component @ConfigurationProperties(prefix = "server") public class ServerProperties { private Map application; private Map
    
      config; private Map users; // getters and setters public static class Credential { private String username; private String password; // getters and setters } }
    

Seperti yang bisa kita lihat, kita mendekorasi kelas ServerProperties dengan @ConfigurationProperties. Dengan cara itu, kami memberi tahu Spring untuk memetakan semua properti dengan awalan yang ditentukan ke objek ServerProperties .

Ingatlah bahwa aplikasi kita juga perlu diaktifkan untuk properti konfigurasi, meskipun ini dilakukan secara otomatis di sebagian besar aplikasi Spring Boot.

Terakhir, mari kita uji apakah properti YAML kita dimasukkan dengan benar sebagai Map :

@RunWith(SpringRunner.class) @SpringBootTest class MapFromYamlIntegrationTest { @Autowired private ServerProperties serverProperties; @Test public void whenYamlFileProvidedThenInjectSimpleMap() { assertThat(serverProperties.getApplication()) .containsOnlyKeys("name", "url", "description"); assertThat(serverProperties.getApplication() .get("name")).isEqualTo("InjectMapFromYAML"); } @Test public void whenYamlFileProvidedThenInjectComplexMap() { assertThat(serverProperties.getConfig()).hasSize(2); assertThat(serverProperties.getConfig() .get("ips") .get(0)).isEqualTo("10.10.10.10"); assertThat(serverProperties.getUsers() .get("root") .getUsername()).isEqualTo("root"); } }

4. @ConfigurationProties vs @Value

Sekarang mari kita lakukan perbandingan singkat antara @ConfigurationProperties dan @Value.

Terlepas dari kenyataan bahwa kedua anotasi dapat digunakan untuk memasukkan properti dari file konfigurasi , keduanya sangat berbeda. Perbedaan utama antara kedua anotasi ini adalah bahwa masing-masing memiliki tujuan yang berbeda.

Singkatnya, @V Alue memungkinkan kita untuk menyuntikkan langsung properti tertentu nilai dengan kunci. Namun, anotasi @ConfigurationProperties mengikat beberapa properti ke objek tertentu dan menyediakan akses ke properti melalui objek yang dipetakan.

Secara umum, Spring merekomendasikan penggunaan @ConfigurationProperties daripada @Value saat memasukkan data konfigurasi . @ConfigurationProperties menawarkan cara yang bagus untuk memusatkan dan mengelompokkan properti konfigurasi dalam objek terstruktur yang nanti dapat kita masukkan ke dalam kacang lain.

5. Kesimpulan

Untuk meringkasnya, pertama-tama kami menjelaskan cara memasukkan Peta dari file YAML di Spring Boot. Kemudian, kami menyoroti perbedaan antara @ConfigurationProperties dan @Value.

Seperti biasa, kode sumber lengkap untuk artikel tersedia di GitHub.