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