@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.


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