Folosind application.yml vs application.properties în Spring Boot

1. Prezentare generală

O practică obișnuită în Spring Boot este utilizarea unei configurații externe pentru a ne defini proprietățile. Acest lucru ne permite să folosim același cod de aplicație în medii diferite.

Putem folosi fișiere de proprietăți, fișiere YAML, variabile de mediu și argumente din linia de comandă.

În acest scurt tutorial, vom explora principalele diferențe dintre proprietăți și fișierele YAML.

2. Configurare proprietăți

În mod implicit, Spring Boot poate accesa configurațiile setate într-un fișier application.properties , care utilizează un format cheie-valoare:

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

Aici, fiecare linie este o singură configurație. Prin urmare, trebuie să exprimăm date ierarhice utilizând aceleași prefixe pentru cheile noastre. Și, în acest exemplu, fiecare cheie aparține spring.datasource.

2.1. Substituenți în proprietăți

În cadrul valorilor noastre, putem folosi substituenți cu sintaxa $ {} pentru a face referire la conținutul altor chei, proprietăți de sistem sau variabile de mediu.

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

2.2. Structura listei

Dacă avem același tip de proprietăți cu valori diferite, putem reprezenta structura listei cu indicii matrice:

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. Configurare YAML

3.1. Format YAML

Pe lângă fișierele cu proprietăți Java, putem folosi și fișiere de configurare bazate pe YAML în aplicația noastră Spring Boot. YAML este un format convenabil pentru specificarea datelor ierarhice de configurare .

Acum, să luăm același exemplu din fișierul nostru de proprietăți și să-l convertim în YAML:

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

Acest lucru poate fi mai lizibil decât alternativa fișierului său de proprietate, deoarece nu conține prefixe repetate.

3.2. Structura listei

YAML are un format mai concis pentru exprimarea listelor:

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. Profiluri multiple

Un bonus al utilizării YAML este că poate stoca mai multe profiluri în același fișier. Și, în YAML, trei liniuțe indică începutul unui nou document. Deci, toate profilurile pot fi descrise în același fișier:

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

În acest exemplu, avem două secțiuni de arc cu profiluri diferite etichetate. De asemenea, putem avea un set comun de proprietăți la nivelul rădăcină - în acest caz, proprietatea logging.file.name va fi aceeași în toate profilurile.

3.4. Profiluri pe mai multe fișiere

Ca alternativă la a avea profiluri diferite în același fișier, putem stoca mai multe profiluri în fișiere diferite. Și aceasta este singura metodă disponibilă atunci când utilizați fișiere de proprietăți .

Obținem acest lucru punând numele profilului în numele fișierului - de exemplu, application-dev.yml sau application-dev.properties .

4. Utilizarea bootului de primăvară

Acum că ne-am definit configurațiile, să vedem cum să le accesăm.

4.1. Adnotare de valoare

Putem injecta valorile proprietăților noastre folosind adnotarea @Value :

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

Aici, cheia de proprietate. Ceva este injectat prin injectarea câmpului într-unul dintre obiectele noastre.

4.2. Abstractizarea mediului

De asemenea, putem obține valoarea unei proprietăți folosind API-ul Environment :

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

4.3. Adnotare ConfigurationProperties

În cele din urmă, putem utiliza și adnotarea @ConfigurationProperties pentru a lega proprietățile noastre de obiecte structurate sigure la tip:

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

5. Concluzie

În acest articol, am văzut câteva diferențe între proprietăți și fișiere de configurare yml Spring Boot. De asemenea, am văzut cum valorile lor se pot referi la alte proprietăți. În cele din urmă, ne-am uitat la modul de injectare a valorilor în timpul nostru de execuție.

Ca întotdeauna, toate exemplele de cod sunt disponibile pe GitHub.