Menggunakan application.yml vs application.properties di Spring Boot

1. Gambaran keseluruhan

Amalan biasa dalam Spring Boot adalah menggunakan konfigurasi luaran untuk menentukan sifat kami. Ini membolehkan kita menggunakan kod aplikasi yang sama di persekitaran yang berbeza.

Kita dapat menggunakan fail sifat, fail YAML, pemboleh ubah persekitaran, dan argumen baris perintah.

Dalam tutorial ringkas ini, kita akan meneroka perbezaan utama antara sifat dan fail YAML.

2. Konfigurasi Properties

Secara lalai, Spring Boot dapat mengakses konfigurasi yang ditetapkan dalam fail application.properties , yang menggunakan format nilai kunci:

spring.datasource.url=jdbc:h2:dev spring.datasource.username=SA spring.datasource.password=password

Di sini, setiap baris adalah satu konfigurasi. Oleh itu, kita mesti menyatakan data hierarki dengan menggunakan awalan yang sama untuk kunci kita. Dan, dalam contoh ini, setiap kunci adalah milik spring.datasource.

2.1. Pemegang tempat di Hartanah

Dalam nilai kita, kita dapat menggunakan placeholder dengan sintaks $ {} untuk merujuk pada isi kunci, sifat sistem, atau pemboleh ubah persekitaran yang lain.

app.name=MyApp app.description=${app.name} is a Spring Boot application

2.2. Struktur Senarai

Sekiranya kita mempunyai jenis sifat yang sama dengan nilai yang berbeza, kita dapat mewakili struktur senarai dengan indeks array:

application.servers[0].ip=127.0.0.1 application.servers[0].path=/path1 application.servers[1].ip=127.0.0.2 application.servers[1].path=/path2 application.servers[2].ip=127.0.0.3 application.servers[2].path=/path3

3. Konfigurasi YAML

3.1. Format YAML

Seperti juga fail sifat Java, kami juga dapat menggunakan file konfigurasi berdasarkan YAML dalam aplikasi Spring Boot kami. YAML adalah format yang sesuai untuk menentukan data konfigurasi hierarki .

Sekarang, mari kita ambil contoh yang sama dari fail sifat kami dan menukarnya menjadi YAML:

spring: datasource: password: password url: jdbc:h2:dev username: SA

Ini lebih mudah dibaca daripada alternatif fail hartanya kerana tidak mengandungi awalan berulang.

3.2. Struktur Senarai

YAML mempunyai format yang lebih ringkas untuk menyatakan senarai:

application: servers: - ip: '127.0.0.1' path: '/path1' - ip: '127.0.0.2' path: '/path2' - ip: '127.0.0.3' path: '/path3'

3.3. Pelbagai Profil

Bonus menggunakan YAML ialah ia dapat menyimpan beberapa profil dalam fail yang sama. Dan, di YAML, tiga tanda sempang menunjukkan permulaan dokumen baru. Jadi, semua profil dapat dijelaskan dalam fail yang sama:

logging file: name: myapplication.log spring: profiles: staging datasource: password: '' url: jdbc:h2:staging username: SA --- spring: profiles: integration datasource: password: 'password' url: jdbc:mysql://localhost:3306/db_integration username: user

Dalam contoh ini, kita mempunyai dua bahagian spring dengan label berlainan profil . Juga, kita boleh mempunyai satu set sifat yang sama di peringkat akar - dalam kes ini, harta logging.file.name akan sama di semua profil.

3.4. Profil Di Sebilangan Banyak Fail

Sebagai alternatif untuk mempunyai profil yang berbeza dalam fail yang sama, kita dapat menyimpan beberapa profil di pelbagai fail. Dan, ini adalah satu-satunya kaedah yang tersedia semasa menggunakan fail sifat .

Kami mencapainya dengan meletakkan nama profil dalam nama fail - contohnya, application-dev.yml atau application-dev.properties .

4. Penggunaan Spring Boot

Sekarang setelah kita menentukan konfigurasi kita, mari kita lihat cara mengaksesnya.

4.1. Anotasi Nilai

Kami dapat memasukkan nilai harta tanah kami dengan menggunakan anotasi @Value :

@Value("${key.something}") private String injectedProperty;

Di sini, kunci harta benda. Sesuatu disuntik melalui suntikan medan ke salah satu objek kami.

4.2. Pengekstrakan Alam Sekitar

Kami juga dapat memperoleh nilai properti menggunakan API Lingkungan :

@Autowired private Environment env; public String getSomeKey(){ return env.getProperty("key.something"); } 

4.3. Anotasi Konfigurasi

Akhirnya, kami juga dapat menggunakan anotasi @ConfigurationProperties untuk mengikat sifat kami ke objek berstruktur jenis selamat:

@ConfigurationProperties(prefix = "mail") public class ConfigProperties { String name; String description; ...

5. Kesimpulan

Dalam artikel ini, kami telah melihat beberapa perbezaan antara sifat dan fail konfigurasi Spring Boot yml . Kami juga melihat bagaimana nilai mereka boleh merujuk kepada sifat lain. Akhirnya, kami melihat bagaimana memasukkan nilai ke dalam jangka masa kami.

Seperti biasa, semua contoh kod boleh didapati di GitHub.