@PropertySource med YAML-filer i Spring Boot
1. Oversigt
I denne hurtige vejledning viser vi, hvordan man læser en YAML egenskabsfil ved hjælp af @PropertySource kommentar i Spring Boot.
2. @PropertySource og YAML Format
Spring Boot har god understøttelse af ekstern konfiguration. Det er også muligt at bruge forskellige måder og formater til at læse egenskaberne i Spring Boot-applikationen uden for kassen.
Imidlertid, som standard, @PropertySource indlæser ikke YAML-filer. Denne kendsgerning er udtrykkeligt nævnt i den officielle dokumentation.
Så hvis vi vil bruge @PropertySource kommentar i vores ansøgning, vi skal holde os til standarden ejendomme filer. Eller vi kan selv implementere det manglende puslespil!
3. Brugerdefineret PropertySourceFactory
Fra og med foråret 4.3 @PropertySource følger med fabrik attribut. Vi kan gøre brug af det til give vores brugerdefinerede implementering af PropertySourceFactory, som håndterer YAML-filbehandlingen.
Dette er lettere end det lyder! Lad os se, hvordan man gør dette:
offentlig klasse YamlPropertySourceFactory implementerer PropertySourceFactory {@Override public PropertySource createPropertySource (String name, EncodedResource encodedResource) kaster IOException {YamlPropertiesFactoryBean fabrik = ny YamlPropertiesFactoryBean (); factory.setResources (encodedResource.getResource ()); Egenskaber for egenskaber = fabrik.getObject (); returner nye PropertiesPropertySource (encodedResource.getResource (). getFilename (), egenskaber); }}
Som vi kan se, er det nok at implementere en enkelt createPropertySource metode.
Først i vores brugerdefinerede implementering vi brugte YamlPropertiesFactoryBean at konvertere ressourcerne i YAML-format til java.util.Ejendomme objekt.
Derefter returnerede vi simpelthen en ny forekomst af PropertiesPropertySource , som er en indpakning, der giver Spring mulighed for at læse de analyserede egenskaber.
4. @PropertySource og YAML i aktion
Lad os nu sætte alle brikkerne sammen og se, hvordan vi bruger dem i praksis.
Lad os først oprette en simpel YAML-fil - foo.yml:
yaml: navn: foo aliasser: - abc - xyz
Lad os derefter oprette en egenskabsklasse med @ConfigurationProperties og brug vores brugerdefinerede YamlPropertySourceFactory:
@Configuration @ConfigurationProperties (prefix = "yaml") @PropertySource (værdi = "classpath: foo.yml", fabrik = YamlPropertySourceFactory.class) offentlig klasse YamlFooProperties {private String name; private Liste aliaser; // standard getter og setters}
Og endelig, lad os kontrollere, at egenskaberne er korrekt injiceret:
@RunWith (SpringRunner.class) @SpringBootTest offentlig klasse YamlFooPropertiesIntegrationTest {@Autowired private YamlFooProperties yamlFooProperties; @Test offentlig ugyldig nårFabrikProvidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). indeholder Exakt ("abc", "xyz"); }}
5. Konklusion
For at opsummere viste vi i denne hurtige vejledning først, hvor let det er at oprette en brugerdefineret PropertySourceFactory . Derefter præsenterede vi, hvordan vi overførte denne brugerdefinerede implementering til @PropertySource ved hjælp af dens fabrik attribut.
Følgelig, vi var i stand til at indlæse YAML-egenskabsfilen med succes i vores Spring Boot-applikation.
Som sædvanligt er alle kodeeksempler tilgængelige på GitHub.