Application.yml versus application.properties gebruiken in Spring Boot

1. Overzicht

Een gangbare praktijk in Spring Boot is het gebruik van een externe configuratie om onze eigenschappen te definiëren. Hierdoor kunnen we dezelfde applicatiecode in verschillende omgevingen gebruiken.

We kunnen eigenschappenbestanden, YAML-bestanden, omgevingsvariabelen en opdrachtregelargumenten gebruiken.

In deze korte tutorial onderzoeken we de belangrijkste verschillen tussen eigenschappen en YAML-bestanden.

2. Configuratie van eigenschappen

Spring Boot heeft standaard toegang tot configuraties die zijn ingesteld in een application.properties bestand, dat een sleutelwaarde-indeling gebruikt:

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

Hier is elke regel een enkele configuratie. Daarom moeten we hiërarchische gegevens uitdrukken door dezelfde voorvoegsels voor onze sleutels te gebruiken. En in dit voorbeeld behoort elke sleutel tot spring.datasource.

2.1. Tijdelijke aanduidingen in Eigenschappen

Binnen onze waarden kunnen we tijdelijke aanduidingen gebruiken met de ${} syntaxis om te verwijzen naar de inhoud van andere sleutels, systeemeigenschappen of omgevingsvariabelen.

app.name = MyApp app.description = $ {app.name} is een Spring Boot-applicatie

2.2. Lijststructuur

Als we dezelfde soort eigenschappen hebben met verschillende waarden, kunnen we de lijststructuur weergeven met matrixindices:

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

3.1. YAML-indeling

Naast Java-eigenschappenbestanden kunnen we ook op YAML gebaseerde configuratiebestanden gebruiken in onze Spring Boot-applicatie. YAML is een handig formaat voor het specificeren van hiërarchische configuratiegegevens.

Laten we nu hetzelfde voorbeeld nemen uit ons eigenschappenbestand en het converteren naar YAML:

spring: datasource: wachtwoord: wachtwoord url: jdbc: h2: dev gebruikersnaam: SA

Dit kan beter leesbaar zijn dan het alternatief voor het eigenschappenbestand, aangezien het geen herhaalde voorvoegsels bevat.

3.2. Lijststructuur

YAML heeft een beknopter formaat voor het uitdrukken van lijsten:

toepassing: servers: - ip: '127.0.0.1' pad: '/ pad1' - ip: '127.0.0.2' pad: '/ pad2' - ip: '127.0.0.3' pad: '/ pad3'

3.3. Meerdere profielen

Een bonus van het gebruik van YAML is dat het meerdere profielen in hetzelfde bestand kan opslaan. En, in YAML, drie streepjes geven het begin van een nieuw document aan. Alle profielen kunnen dus in hetzelfde bestand worden beschreven:

logbestand: naam: myapplication.log spring: profielen: staging datasource: wachtwoord: '' url: jdbc: h2: staging gebruikersnaam: SA --- spring: profielen: integratie databron: wachtwoord: 'wachtwoord' url: jdbc: mysql: // localhost: 3306 / db_integration gebruikersnaam: gebruiker

In dit voorbeeld hebben we er twee voorjaar secties met verschillende profielen getagd. We kunnen ook een gemeenschappelijke set eigenschappen op het hoofdniveau hebben - in dit geval de logging.file.name eigenschap zal in alle profielen hetzelfde zijn.

3.4. Profielen over meerdere bestanden

Als alternatief voor het hebben van verschillende profielen in hetzelfde bestand, kunnen we meerdere profielen in verschillende bestanden opslaan. En dit is de enige beschikbare methode bij gebruik eigendommen bestanden.

Dit bereiken we door de naam van het profiel in de bestandsnaam te zetten - bijvoorbeeld applicatie-dev.yml of application-dev.properties.

4. Gebruik van springlaarzen

Nu we onze configuraties hebben gedefinieerd, gaan we kijken hoe u ze kunt openen.

4.1. Waarde Annotatie

We kunnen de waarden van onze eigenschappen injecteren met behulp van de @Waarde annotatie:

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

Hier, het pand sleutel. iets wordt via veldinjectie in een van onze objecten geïnjecteerd.

4.2. Milieu Abstractie

We kunnen ook de waarde van een onroerend goed verkrijgen met behulp van de Milieu API:

@Autowired privéomgeving env; public String getSomeKey () {return env.getProperty ("key.something"); } 

4.3. Configuratie-eigenschappen Annotatie

Ten slotte kunnen we ook de @ConfigurationProperties annotatie om onze eigenschappen te binden aan type-veilige gestructureerde objecten:

@ConfigurationProperties (prefix = "mail") openbare klasse ConfigProperties {Stringnaam; String beschrijving; ...

5. Conclusie

In dit artikel hebben we enkele verschillen gezien tussen eigendommen en yml Spring Boot-configuratiebestanden. We zagen ook hoe hun waarden naar andere eigendommen konden verwijzen. Ten slotte hebben we gekeken hoe we de waarden in onze runtime konden injecteren.

Zoals altijd zijn alle codevoorbeelden beschikbaar op GitHub.