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.