@PropertySource met YAML-bestanden in Spring Boot
1. Overzicht
In deze korte tutorial laten we zien hoe je een YAML-eigenschappenbestand kunt lezen met behulp van de @PropertySource annotatie in Spring Boot.
2. @PropertySource en YAML Formaat
Spring Boot heeft geweldige ondersteuning voor externe configuratie. Het is ook mogelijk om verschillende manieren en formaten te gebruiken om de eigenschappen in de Spring Boot-applicatie out-of-the-box te lezen.
Echter, standaard, @PropertySource laadt geen YAML-bestanden. Dit feit wordt expliciet vermeld in de officiële documentatie.
Dus als we de @PropertySource annotatie in onze applicatie, moeten we ons aan de standaard houden eigendommen bestanden. Of we kunnen het ontbrekende puzzelstukje zelf implementeren!
3. Aangepast PropertySourceFactory
Vanaf voorjaar 4.3, @PropertySource wordt geleverd met de fabriek attribuut. We kunnen er gebruik van maken bieden onze aangepaste implementatie van de PropertySourceFactory, die de verwerking van het YAML-bestand zal afhandelen.
Dit is gemakkelijker dan het klinkt! Laten we eens kijken hoe we dit kunnen doen:
openbare klasse YamlPropertySourceFactory implementeert PropertySourceFactory {@Override openbare PropertySource createPropertySource (tekenreeksnaam, EncodedResource encodedResource) gooit IOException {YamlPropertiesFactoryBean factory = nieuwe YamlPropertiesFactoryBean (); factory.setResources (encodedResource.getResource ()); Eigenschappen properties = factory.getObject (); retourneer nieuwe PropertiesPropertySource (encodedResource.getResource (). getFilename (), eigenschappen); }}
Zoals we kunnen zien, is het voldoende om een single te implementeren createPropertySource methode.
In onze aangepaste implementatie, ten eerste, we gebruikten de YamlPropertiesFactoryBean om de bronnen in YAML-indeling te converteren naar het java.util.Properties voorwerp.
Vervolgens hebben we gewoon een nieuw exemplaar van het EigenschappenPropertySource , wat een wrapper is waarmee Spring de geparseerde eigenschappen kan lezen.
4. @PropertySource en YAML in actie
Laten we nu alle stukjes samenvoegen en kijken hoe we ze in de praktijk kunnen gebruiken.
Laten we eerst een eenvoudig YAML-bestand maken - foo.yml:
yaml: naam: foo aliassen: - abc - xyz
Laten we vervolgens een eigenschappenklasse maken met @ConfigurationProperties en gebruik onze gewoonte YamlPropertySourceFactory:
@Configuration @ConfigurationProperties (prefix = "yaml") @PropertySource (value = "classpath: foo.yml", factory = YamlPropertySourceFactory.class) openbare klasse YamlFooProperties {private String-naam; privélijst aliassen; // standaard getter en setters}
En tenslotte, laten we controleren of de eigenschappen correct zijn geïnjecteerd:
@RunWith (SpringRunner.class) @SpringBootTest openbare klasse YamlFooPropertiesIntegrationTest {@Autowired privé YamlFooProperties yamlFooProperties; @Test openbare leegte whenFactoryProvidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). containsExactly ("abc", "xyz"); }}
5. Conclusie
Samenvattend hebben we in deze korte tutorial eerst laten zien hoe gemakkelijk het is om een custom PropertySourceFactory . Daarna hebben we laten zien hoe u deze aangepaste implementatie kunt doorgeven aan het @PropertySource met behulp van zijn fabriek attribuut.
Bijgevolg, we waren in staat om het YAML-eigenschappenbestand met succes in onze Spring Boot-applicatie te laden.
Zoals gewoonlijk zijn alle codevoorbeelden beschikbaar op GitHub.