IntelliJ - Fejl ved konfiguration af Spring Boot-konfiguration kan ikke løses

1. Oversigt

Når vi indsprøjter runtime-egenskaber i vores Spring-applikationer, kan vi definere bønneklasser for grupper af brugerdefinerede egenskaber.

IntelliJ giver hjælp og udfyldes automatisk til de indbyggede egenskaber bønner. Det har dog brug for lidt hjælp til at levere disse til brugerdefinerede egenskaber.

I denne korte vejledning ser vi på, hvordan du eksponerer disse egenskaber for IntelliJ for at gøre udviklingsprocessen lettere.

2. Brugerdefinerede egenskaber

Lad os se på hjælp på skærmen, som IntelliJ kan give os angående vores applikations egenskaber:

Her er egenskaberne url og timeout-i-millisekunder er brugerdefinerede egenskaber. Vi kan se en beskrivelse, type og en valgfri standardværdi.

Men hvis en ejendom er ukendt, vil IntelliJ vise os en advarsel:

Dette er fordi, uden metadata kan IntelliJ ikke hjælpe os.

Lad os nu se på, hvad vi skal gøre for at løse dette.

3. Afhængigheder

Først skal vi tilføje fjeder-boot-konfiguration-processor afhængighed af vores pom.xml:

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

Det fjeder-boot-konfiguration-processor påberåbes hver gang vi bygger vores projekt. Det opretter metadatafilerne i target / klasser / META-INF /.

Afhængigheden er markeret som valgfri, hvilket betyder, at den ikke nedarves, når nogen bruger vores projekt som en afhængighed.

Derefter ser vi, hvor fjeder-boot-konfiguration-processor får de oplysninger, der bruges til at oprette metadataene.

4. Konfigurationsmetadata med @ConfigurationProperties

Vi definerer vores egenskaber i en klasse, der er kommenteret med @ConfigurationProperties:

@Configuration @ConfigurationProperties (prefix = "com.baeldung") offentlig klasse CustomProperties {/ ** * Den url, du skal oprette forbindelse til. * / String url; / ** * Tid til at vente på forbindelsen. * / private int timeoutInMilliSeconds = 1000; // Getters og Setters}

Her indeholder klassen ejendomsnavne, deres typer og eventuelle standardindstillinger i initialiseringslisten. Javadoc giver også beskrivelser af hver ejendom.

Under en opbygning er annoteringsprocessor søger efter alle klasser, der er kommenteret med@ConfigurationProperties. Det genererer tilpassede egenskabsmetadata for hver forekomstvariabel i klassen.

5. Konfigurationsmetadatafil

5.1. Format for metadatafilen

Metadatafilen, der beskriver de brugerdefinerede egenskaber, driver den kontekstuelle hjælp i IntelliJ, for eksempel:

{"grupper": [{"name": "com.baeldung", "type": "com.baeldung.configuration.processor.CustomProperties", "sourceType": "com.baeldung.configuration.processor.CustomProperties"}] , "egenskaber": [{"name": "com.baeldung.url", "type": "java.lang.String", "description": "Den url der skal oprettes forbindelse til.", "sourceType": "com .baeldung.configuration.processor.CustomProperties "}, {" name ":" com.baeldung.timeout-in-milli-seconds "," type ":" java.lang.Integer "," description ":" Tiden til vent på forbindelsen. "," sourceType ":" com.baeldung.configuration.processor.CustomProperties "," defaultValue ": 1000}]," hints ": []}

Da annotationsprocessoren genererer denne fil for os fra vores kode, er der ingen grund til at se på eller redigere denne fil direkte.

5.2. Metadata Uden en ConfigurationProperties Bønne

Hvis vi har eksisterende egenskaber, der ikke er introduceret af en @ConfigurationProperties, men stadig vil have deres metadata-fil, så kan IntelliJ hjælpe.

Lad os se nærmere på advarselsmeddelelsen fra før:

Her ser vi en Definer konfigurationsnøgle mulighed, som vi kan bruge til at oprette en ekstra-fjeder-konfiguration-metadata.json fil. Den oprettede fil vil se ud:

{"egenskaber": [{"name": "com.baeldung.timeoutInMilliSeconds", "type": "java.lang.String", "description": "Beskrivelse af com.baeldung.timeoutInMilliSeconds." }]}

Da der ikke er nogen oplysninger om ejendommen fra andre steder, vi bliver nødt til at redigere metadataene manuelt inde i den. Standardindstillingen type er altids String.

Lad os lægge nogle ekstra oplysninger i filen:

{"egenskaber": [{"navn": "com.baeldung.timeout-in-milli-sekunder", "type": "java.lang.Integer", "beskrivelse": "Tiden til at vente på forbindelsen. "," sourceType ":" com.baeldung.configuration.processor.CustomProperties "," defaultValue ": 1000}]}

Bemærk, at vi bliver nødt til det genopbyg projektet for at se, at den nye ejendom kommer op i autofuldførelse.

Vi skal også bemærke, at muligheden for at generere denne metadatafil også er tilgængelig via IntelliJs Alt + ENTER-genvej over en ukendt egenskab.

6. Konklusion

I denne artikel så vi på, hvordan IntelliJ bruger konfigurationsegenskabens metadata til at hjælpe med vores egenskabsfiler.

Vi så, hvordan vi bruger Spring's annoteringsprocessor til at generere metadataene fra brugerdefinerede klasser. Derefter så vi, hvordan man bruger en genvej i IntelliJ til at oprette en metadatafil, der skal redigeres manuelt.

Som altid kan koden fra eksemplerne i denne artikel findes på GitHub.


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