Vodič za metapodatke o konfiguraciji proljetnog pokretanja

1. Pregled

Kada pišete aplikaciju Spring Boot, korisno je mapirati svojstva konfiguracije na Java grah. Koji je ipak najbolji način dokumentiranja tih svojstava?

U ovom uputstvu istražit ćemo procesor za konfiguraciju proljetnog pokretanja i pridružene datoteke metapodataka JSON koje dokumentiraju značenje, ograničenja svakog svojstva i tako dalje.

2. Metapodaci o konfiguraciji

Većina aplikacija na kojima radimo kao programeri moraju se u određenoj mjeri moći konfigurirati. Međutim, obično zapravo ne razumijemo što radi konfiguracijski parametar ako ima zadanu vrijednost, ako je zastario, a ponekad čak i ne znamo da svojstvo postoji.

Kako bi nam pomogao, Spring Boot generira metapodatke o konfiguraciji u JSON datoteci, što nam daje korisne informacije o tome kako koristiti svojstva. Tako, konfiguracijski metapodaci je opisna datoteka koja sadrži potrebne informacije za interakciju s svojstvima konfiguracije.

Stvarno lijepa stvar ove datoteke je ta IDE također mogu pročitati, dajući nam samodovršavanje svojstava Spring, kao i ostale savjete za konfiguraciju.

3. Ovisnosti

Da bismo generirali ove konfiguracijske metapodatke, upotrijebit ćemo konfiguracijski procesor iz spring-boot-configuration-procesor ovisnost.

Dakle, idemo naprijed i dodajte ovisnost kao neobavezna:

 org.springframework.boot spring-boot-configuration-processor 2.1.6.RELEASE true 

Ova ovisnost pružit će nam Java procesor napomena koji se poziva kada gradimo naš projekt. O tome ćemo detaljno razgovarati kasnije.

Najbolja je praksa dodavanje ovisnosti kao neobavezna u Mavenu kako bi se spriječilo @ConfigurationProperties od primjene na druge module koji naš projekt koristi.

4. Primjer svojstava konfiguracije

Da bismo vidjeli procesor u akciji, zamislimo da imamo nekoliko svojstava koja moramo uključiti u našu aplikaciju Spring Boot putem Java zrna:

@Configuration @ConfigurationProperties (prefix = "database") javna klasa DatabaseProperties {javna statička klasa Server {private String ip; privatna int luka; // standardni getteri i postavljači} privatno String korisničko ime; privatna lozinka za niz; privatni poslužitelj poslužitelja; // standardni geteri i postavljači}

Da bismo to učinili, koristili bismo @ConfigurationProperties bilješka. Konfiguracijski procesor pomoću ove bilješke skenira klase i metode za pristup konfiguracijskim parametrima i generiranje konfiguracijskih metapodataka.

Dodajmo nekoliko ovih svojstava u datoteku svojstava. U ovom ćemo ga slučaju nazvati databaseproperties-test.properties:

# Jednostavna svojstva database.username = baeldung database.password = lozinka

I, samo da budemo sigurni, dodati ćemo i test kako bismo bili sigurni da smo svi poredani:

@RunWith (SpringRunner.class) @SpringBootTest (classes = AnnotationProcessorApplication.class) @TestPropertySource ("classpath: databaseproperties-test.properties") javna klasa DatabasePropertiesIntegrationTest {@Autowired private DatabaseProperties databaseProperties @Test public void whenSimplePropertyQueriedThenReturnsPropertyValue () baca izuzetak {Assert.assertEquals ("Neispravno povezano svojstvo korisničkog imena", "baeldung", databaseProperties.getUsername ()); Assert.assertEquals ("Pogrešno povezano svojstvo lozinke", "lozinka", databaseProperties.getPassword ()); }}

Dodali smo i ugniježđena svojstva database.server.id i database.server.port putem unutarnje klase Poslužitelj. Trebali bismo dodati unutarnju klasu Poslužitelj kao i polje poslužitelju s vlastitim geterom i postavljačem.

U našem testu, napravimo brzu provjeru kako bismo bili sigurni da možemo postaviti i pročitati i uspješno ugniježđena svojstva:

@Test public void whenNestedPropertyQueriedThenReturnsPropertyValue () baca iznimku {Assert.assertEquals ("Pogrešno vezano ugniježđeno svojstvo IP poslužitelja", "127.0.0.1", databaseProperties.getServer (). GetIp ()); Assert.assertEquals ("Neispravno povezano ugniježđeno svojstvo porta poslužitelja", 3306, databaseProperties.getServer (). GetPort ()); }

U redu, sada smo spremni za upotrebu procesora.

5. Generiranje metapodataka o konfiguraciji

Ranije smo spomenuli da konfiguracijski procesor generira datoteku - on to koristi obradu bilješki.

Dakle, nakon sastavljanja našeg projekta, vidjet ćemo a datoteka nazvana spring-configuration-metadata.json iznutra cilj / razredi / META-INF:

{"groups": [{"name": "database", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"}, {" ime ":" database.server "," type ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties $ Server "," sourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties "," sourceMethod ":" getServer ( ) "}]," svojstva ": [{" name ":" database.password "," type ":" java.lang.String "," sourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties "}, {"name": "database.server.ip", "type": "java.lang.String", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties $ Server"}, {"name": " database.server.port "," type ":" java.lang.Integer "," sourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties $ Server "," defaultValue ": 0}, {" name ":" database.username "," type ":" java.lang.String " , "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"}], "hints": []}

Dalje, pogledajmo kako mijenjanje bilješki na našim Java grahovima utječe na metapodatke.

5.1. Dodatne informacije o konfiguracijskim metapodacima

Prvo, dodajmo JavaDoc komentare na Poslužitelj.

Drugo, dajmo zadanu vrijednost za database.server.port polje i na kraju dodajte @ Min i @Max napomene:

javna statička klasa poslužitelj {/ ** * IP poslužitelja baze podataka * / private String ip; / ** * Luka poslužitelja baze podataka. * Zadana vrijednost je 443. * Dopuštene vrijednosti su u rasponu 400-4000. * / @ Min (400) @Max (800) privatni int port = 443; // standardni geteri i postavljači}

Ako provjerimo spring-configuration-metadata.json Sada ćemo vidjeti ove dodatne informacije:

{"groups": [{"name": "database", "type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"}, {" ime ":" database.server "," type ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties $ Server "," sourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties "," sourceMethod ":" getServer ( ) "}]," svojstva ": [{" name ":" database.password "," type ":" java.lang.String "," sourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties "}, {"name": "database.server.ip", "type": "java.lang.String", "description": "IP poslužitelja baze podataka", "sourceType": "com.baeldung.autoconfiguration.annotationprocessor .DatabaseProperties $ Server "}, {" name ":" database.server.port "," type ":" java.lang.Integer "," description ":" Port poslužitelja baze podataka. Zadana vrijednost je 443. Dopuštene vrijednosti su u rasponu 400-4000 "," s ourceType ":" com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties $ Server "," defaultValue ": 443}, {" name ":" database.username "," type ":" java.lang.String "," sourceType " : "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"}], "hints": []}

Razlike možemo provjeriti pomoću database.server.ip i database.server.port polja. Doista, dodatne informacije su vrlo korisne. Kao rezultat toga, programerima i IDE-ima je puno lakše razumjeti što svako svojstvo radi.

Također bismo trebali biti sigurni da smo pokrenuli izgradnju kako bismo dobili ažuriranu datoteku. U Eclipseu, ako provjerimo Gradite automatski opcija, svaka radnja spremanja pokrenut će izgradnju. U IntelliJ-u bismo trebali ručno pokrenuti izradu.

5.2. Razumijevanje formata metapodataka

Pogledajmo pobliže datoteku metapodataka JSON i raspravimo o njezinim komponentama.

Grupe su stavke više razine koje se koriste za grupiranje ostalih svojstava, bez navođenja same vrijednosti. U našem primjeru imamo baza podataka group, koji je ujedno i prefiks svojstava konfiguracije. Također imamo i poslužitelju grupi koju smo stvorili putem unutarnjeg razreda i grupa ip i luka Svojstva.

Svojstva su konfiguracijske stavke za koje možemo odrediti vrijednost. Ova svojstva su postavljena u .Svojstva ili .iml datoteke i mogu imati dodatne informacije, poput zadanih vrijednosti i provjera valjanosti, kao što smo vidjeli u gornjem primjeru.

Savjeti su dodatne informacije koje pomažu korisniku da postavi vrijednost svojstva. Na primjer, ako imamo skup dopuštenih vrijednosti za svojstvo, možemo pružiti opis onoga što svako od njih radi. IDE će pružiti pomoć za automatsko nadmetanje za ove savjete.

Svaka komponenta u metapodacima o konfiguraciji ima svoje atribute koji detaljnije objašnjavaju svojstva konfiguracije.

6. Zaključak

U ovom smo članku pogledali procesor za konfiguraciju proljetnog pokretanja i njegovu sposobnost stvaranja metapodataka o konfiguraciji. Korištenje ovih metapodataka olakšava interakciju s našim konfiguracijskim parametrima.

Dali smo primjer generiranih metapodataka o konfiguraciji i detaljno objasnili njihov format i komponente.

Također smo vidjeli koliko korisna može biti podrška za samodovršavanje na našem IDE-u.

Kao i uvijek, svi isječci koda spomenuti u ovom članku mogu se naći na našem GitHub spremištu.