Spring YAML-configuratie

1. Overzicht

Een van de manieren om Spring-applicaties te configureren, is het gebruik van YAML-configuratiebestanden.

In dit korte artikel zullen we verschillende profielen configureren voor een eenvoudige Spring Boot-applicatie met YAML.

2. Spring YAML-bestand

Spring-profielen helpen Spring Applications om verschillende eigenschappen voor verschillende omgevingen te definiëren.

Hieronder volgt een eenvoudig YAML-bestand dat twee profielen bevat. De drie streepjes die de twee profielen scheiden, geven het begin van een nieuw document aan, zodat alle profielen in hetzelfde YAML-bestand kunnen worden beschreven.

Het relatieve pad van application.yml bestand is /myApplication/src/main/resources/application.yml.

De Spring-applicatie neemt het eerste profiel als het standaardprofiel, tenzij anders aangegeven in de Spring-applicatie.

spring: config: activated: on-profile: test naam: test-YAML omgeving: testen ingeschakeld: valse servers: - www.abc.test.com - www.xyz.test.com --- spring: config: activated: on -profiel: productnaam: prod-YAML-omgeving: productie ingeschakeld: echte servers: - www.abc.com - www.xyz.com

3. YAML aan een configuratieklasse binden

Om een ​​reeks gerelateerde eigenschappen uit een eigenschappenbestand te laden, zullen we een bean-klasse maken:

@Configuration @EnableConfigurationProperties @ConfigurationProperties openbare klasse YAMLConfig {private String-naam; private String-omgeving; private boolean ingeschakeld; private List-servers = nieuwe ArrayList (); // standaard getters en setters}

De annotatie die hier wordt gebruikt, is:

  • @Configuratiemarkeert de klasse als een bron van bean-definities
  • @ConfigurationProperties bindt en valideert de externe configuraties aan een configuratieklasse
  • @EnableConfigurationProperties deze annotatie wordt gebruikt om @ConfigurationProperties geannoteerde bonen in de Spring-applicatie

4. Toegang tot de YAML-eigenschappen

Om toegang te krijgen tot de YAML-eigenschappen, maken we een object van de YAMLConfig class en open de eigenschappen met dat object.

Laten we in het eigenschappenbestand het spring.active.profiles omgevingsvariabele naar prik. Als we het niet definiëren spring.profiles.active, het wordt standaard ingesteld op de eerste profieleigenschap die is gedefinieerd in het YAML-bestand.

Het relatieve pad voor het eigenschappenbestand is /myApplication/src/main/resources/application.properties.

spring.profiles.active = prod

In dit voorbeeld geven we de eigenschappen weer met behulp van de CommandLineRunner.

@SpringBootApplication openbare klasse MyApplication implementeert CommandLineRunner {@Autowired privé YAMLConfig myConfig; openbare statische leegte hoofd (String [] args) {SpringApplication app = nieuwe SpringApplication (MyApplication.class); app.run (); } public void run (String ... args) gooit uitzondering {System.out.println ("met omgeving:" + myConfig.getEnvironment ()); System.out.println ("naam:" + myConfig.getName ()); System.out.println ("enabled:" + myConfig.isEnabled ()); System.out.println ("servers:" + myConfig.getServers ()); }}

De uitvoer op de opdrachtregel:

omgeving gebruiken: productienaam: prod-YAML ingeschakeld: echte servers: [www.abc.com, www.xyz.com]

5. YAML-eigenschap overschrijven

In Spring Boot kunnen YAML-bestanden worden overschreven door andere YAML-eigenschappenbestanden.

Vóór versie 2.4.0 werden YAML-eigenschappen overschreven door eigenschappenbestanden op de volgende locaties, in volgorde van hoogste prioriteit eerst:

  • Eigenschappen van profielen geplaatst buiten de verpakte pot
  • Eigenschappen van profielen verpakt in de verpakte pot
  • Toepassingseigenschappen buiten de verpakte pot geplaatst
  • Toepassingseigenschappen verpakt in de verpakte pot

Vanaf Spring Boot 2.4 overschrijven externe bestanden altijd verpakte bestanden, ongeacht of ze profielspecifiek zijn of niet.

6. Conclusie

In dit korte artikel hebben we gezien hoe u eigenschappen in Spring Boot-applicaties configureert met YAML. We hebben ook gezien dat de eigenschap de regels overschrijft, gevolgd door Spring Boot voor YAML-bestanden.

De code voor dit artikel is beschikbaar op GitHub.