@PropertySource so súbormi YAML na jar

1. Prehľad

V tomto rýchlom návode si ukážeme, ako čítať súbor vlastností YAML pomocou @PropertySource anotácia v Spring Boot.

2. @PropertySource a YAML Formát

Spring Boot má veľkú podporu pre externú konfiguráciu. Je tiež možné použiť rôzne spôsoby a formáty na okamžité čítanie vlastností v aplikácii Spring Boot.

Avšak predvolene, @PropertySource nenačíta súbory YAML. Táto skutočnosť je výslovne uvedená v oficiálnej dokumentácii.

Ak teda chceme použiť @PropertySource anotácie v našej aplikácii, musíme sa držať štandardu vlastnosti súbory. Alebo môžeme chýbajúci kúsok skladačky implementovať sami!

3. Vlastné PropertySourceFactory

Od jari 4.3 @PropertySource prichádza s továreň atribút. Môžeme to využiť na zabezpečíme našu vlastnú implementáciu PropertySourceFactory, ktorý bude spracovávať spracovanie súborov YAML.

Je to jednoduchšie, ako to znie! Pozrime sa, ako to urobiť:

verejná trieda YamlPropertySourceFactory implementuje PropertySourceFactory {@Override verejný PropertySource createPropertySource (názov reťazca, EncodedResource encodedResource) vyvolá IOException {YamlPropertiesFactoryBean factory = nový YamlPropertiesFactoryBean (); factory.setResources (encodedResource.getResource ()); Vlastnosti vlastnosti = factory.getObject (); vrátiť nové PropertiesPropertySource (encodedResource.getResource (). getFilename (), vlastnosti); }}

Ako vidíme, stačí implementovať jediný createPropertySource metóda.

Pri našej vlastnej implementácii použili sme YamlPropertiesFactoryBean prevádzať zdroje vo formáte YAML na formát java.util.Vlastnosti objekt.

Potom sme jednoducho vrátili novú inštanciu súboru PropertiesPropertySource , čo je obal, ktorý umožňuje Springu načítať analyzované vlastnosti.

4. @PropertySource a YAML v akcii

Poďme teraz poskladať všetky kúsky a pozrime sa, ako ich využiť v praxi.

Najskôr vytvorme jednoduchý súbor YAML - foo.yml:

yaml: name: foo aliasy: - abc - xyz

Ďalej vytvoríme triedu vlastností pomocou @ConfigurationProperties a použijeme náš zvyk YamlPropertySourceFactory:

@Configuration @ConfigurationProperties (prefix = "yaml") @PropertySource (value = "classpath: foo.yml", factory = YamlPropertySourceFactory.class) verejná trieda YamlFooProperties {súkromné ​​meno reťazca; súkromné ​​aliasy Zoznamu; // štandardný getter a setter}

A nakoniec, overme, či sú vlastnosti správne vložené:

@RunWith (SpringRunner.class) @SpringBootTest verejná trieda YamlFooPropertiesIntegrationTest {@Autowired súkromné ​​YamlFooProperties yamlFooProperties; @Test public void whenFactoryProvidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). containsExactly ("abc", "xyz"); }}

5. Záver

Ak to zhrnieme, v tomto rýchlom návode sme si najskôr ukázali, aké ľahké je vytvoriť si vlastný PropertySourceFactory . Potom sme predstavili, ako preniesť túto vlastnú implementáciu na server @PropertySource pomocou jeho továreň atribút.

V dôsledku toho podarilo sa nám úspešne načítať súbor vlastností YAML do našej aplikácie Spring Boot.

Ako obvykle sú všetky príklady kódov k dispozícii na GitHub.