@PropertySource med YAML-filer i Spring Boot

1. Oversikt

I denne raske opplæringen viser vi hvordan du leser en YAML-egenskaperfil ved hjelp av @PropertySource kommentar i Spring Boot.

2. @PropertySource og YAML Format

Spring Boot har god støtte for ekstern konfigurasjon. Det er også mulig å bruke forskjellige måter og formater for å lese egenskapene i Spring Boot-applikasjonen utenom boksen.

Derimot, som standard, @PropertySource laster ikke YAML-filer. Dette faktum er eksplisitt nevnt i den offisielle dokumentasjonen.

Så hvis vi vil bruke @PropertySource kommentar i søknaden vår, må vi holde oss til standarden eiendommer filer. Eller vi kan implementere det manglende puslespillet selv!

3. Tilpasset PropertySourceFactory

Fra og med våren 4.3, @PropertySource kommer med fabrikk Egenskap. Vi kan bruke det til gi vår tilpassede implementering av PropertySourceFactory, som vil håndtere YAML-filbehandlingen.

Dette er lettere enn det høres ut! La oss se hvordan du gjør dette:

offentlig klasse YamlPropertySourceFactory implementerer PropertySourceFactory {@Override public PropertySource createPropertySource (String name, EncodedResource encodedResource) kaster IOException {YamlPropertiesFactoryBean fabrikken = ny YamlPropertiesFactoryBean (); factory.setResources (encodedResource.getResource ()); Egenskaper egenskaper = fabrikk.getObject (); returner nye PropertiesPropertySource (encodedResource.getResource (). getFilename (), egenskaper); }}

Som vi kan se, er det nok å implementere en enkelt createPropertySource metode.

I vår tilpassede implementering, først, vi brukte YamlPropertiesFactoryBean for å konvertere ressursene i YAML-format til java.util.Eiendommer gjenstand.

Så returnerte vi ganske enkelt en ny forekomst av PropertiesPropertySource , som er en innpakning som lar våren lese de analyserte egenskapene.

4. @PropertySource og YAML i aksjon

La oss nå sette sammen alle delene og se hvordan vi kan bruke dem i praksis.

La oss først lage en enkel YAML-fil - foo.yml:

yaml: navn: foo aliaser: - abc - xyz

La oss deretter lage en eiendomsklasse med @ConfigurationProperties og bruk vår skikk YamlPropertySourceFactory:

@Configuration @ConfigurationProperties (prefix = "yaml") @PropertySource (value = "classpath: foo.yml", factory = YamlPropertySourceFactory.class) offentlig klasse YamlFooProperties {private String name; private Liste aliaser; // standard getter og setters}

Og endelig, la oss kontrollere at egenskapene er riktig injisert:

@RunWith (SpringRunner.class) @SpringBootTest offentlig klasse YamlFooPropertiesIntegrationTest {@Autowired private YamlFooProperties yamlFooProperties; @Test offentlig ugyldig når FabrikkProvidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). inneholder nøyaktig ("abc", "xyz"); }}

5. Konklusjon

For å oppsummere, i denne raske opplæringen, viste vi først hvor enkelt det er å lage en tilpasset PropertySourceFactory . Etter det presenterte vi hvordan vi kunne overføre denne tilpassede implementeringen til @PropertySource bruker sin fabrikk Egenskap.

Følgelig vi var i stand til å laste YAML-egenskapsfilen i vår Spring Boot-applikasjon.

Som vanlig er alle kodeeksemplene tilgjengelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found