@PropertySource s YAML datotekama u Spring Boot-u

1. Pregled

U ovom brzom vodiču pokazat ćemo kako čitati datoteku svojstava YAML pomoću @PropertySource napomena u Spring Boot.

2. @PropertySource i YAML Format

Spring Boot ima izvrsnu podršku za eksternaliziranu konfiguraciju. Također, moguće je koristiti različite načine i formate za čitanje svojstava u aplikaciji Spring Boot odmah.

Međutim, prema zadanim postavkama, @PropertySource ne učitava YAML datoteke. Ta se činjenica izričito spominje u službenoj dokumentaciji.

Dakle, ako želimo koristiti @PropertySource napomena u našoj aplikaciji, moramo se pridržavati standarda Svojstva datoteke. Ili nedostajući dio slagalice možemo primijeniti sami!

3. Prilagođeno PropertySourceFactory

Od proljeća 4.3, @PropertySource dolazi s tvornica atribut. Možemo ga iskoristiti za pružiti našu prilagođenu implementaciju PropertySourceFactory, koji će se baviti obradom YAML datoteka.

Ovo je lakše nego što zvuči! Pogledajmo kako to učiniti:

javna klasa YamlPropertySourceFactory implementira PropertySourceFactory {@Override public PropertySource createPropertySource (naziv niza, EncodedResource encodedResource) baca IOException {YamlPropertiesFactoryBean factory = new YamlPropertiesFactory; factory.setResources (encodedResource.getResource ()); Svojstva svojstva = factory.getObject (); vrati novi PropertiesPropertySource (encodedResource.getResource (). getFilename (), svojstva); }}

Kao što vidimo, dovoljno je implementirati jedan createPropertySource metoda.

U našoj prilagođenoj implementaciji, prvo, koristili smo YamlPropertiesFactoryBean za pretvaranje resursa u YAML formatu u java.util.Vlasnosti objekt.

Zatim smo jednostavno vratili novu instancu PropertiesPropertySource , koji je omot koji omogućuje Springu da pročita raščlanjena svojstva.

4. @PropertySource i YAML na djelu

Sastavimo sada sve dijelove i pogledajte kako ih koristiti u praksi.

Prvo, stvorimo jednostavnu YAML datoteku - foo.yml:

yaml: ime: foo aliasi: - abc - xyz

Dalje, kreirajmo klasu svojstava s @ConfigurationProperties i koristite naš običaj YamlPropertySourceFactory:

@Configuration @ConfigurationProperties (prefix = "yaml") @PropertySource (value = "classpath: foo.yml", factory = YamlPropertySourceFactory.class) javna klasa YamlFooProperties {private String name; privatni pseudonimi s popisa; // standardni getter i postavljači}

I konačno, provjerimo jesu li svojstva pravilno ubrizgana:

@RunWith (SpringRunner.class) @SpringBootTest javna klasa YamlFooPropertiesIntegrationTest {@Autowired private YamlFooProperties yamlFooProperties; @Test public void whenFactoryProvidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). containsExactly ("abc", "xyz"); }}

5. Zaključak

Da rezimiramo, u ovom smo brzom vodiču prvo pokazali kako je lako stvoriti običaj PropertySourceFactory . Nakon toga, predstavili smo kako proslijediti ovu prilagođenu implementaciju na @PropertySource koristeći svoj tvornica atribut.

Slijedom toga, uspjeli smo uspješno učitati datoteku svojstava YAML u našu aplikaciju Spring Boot.

Kao i obično, svi primjeri koda dostupni su na GitHubu.