IntelliJ - Fout met configuratie-eigenschappen voor Spring Boot kan niet worden opgelost

1. Overzicht

Wanneer we runtime-eigenschappen in onze Spring-applicaties injecteren, kunnen we bean-klassen definiëren voor groepen aangepaste eigenschappen.

IntelliJ biedt hulp en automatisch aanvullen voor de ingebouwde eigenschappen van beans. Het heeft echter wat hulp nodig om deze voor aangepaste eigenschappen op te geven.

In deze korte zelfstudie bekijken we hoe u deze eigenschappen aan IntelliJ kunt tonen om het ontwikkelingsproces gemakkelijker te maken.

2. Aangepaste eigenschappen

Laten we eens kijken naar de hulp op het scherm die IntelliJ ons kan bieden met betrekking tot de eigenschappen van onze applicatie:

Hier de eigendommen url en time-out in milliseconden zijn aangepaste eigenschappen. We kunnen een beschrijving, type en een optionele standaardwaarde zien.

Maar als een eigenschap onbekend is, zal IntelliJ ons een waarschuwing laten zien:

Dit is zo omdat, zonder metadata kan IntelliJ ons niet helpen.

Laten we nu eens kijken wat we moeten doen om dit op te lossen.

3. Afhankelijkheden

Eerst moeten we de spring-boot-configuratie-processor afhankelijkheid van onze pom.xml:

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

De spring-boot-configuratie-processor wordt elke keer dat we ons project bouwen, aangeroepen. Het maakt de metadatabestanden aan in target / klassen / META-INF /.

De afhankelijkheid is gemarkeerd als optioneel, wat betekent dat het niet wordt geërfd wanneer iemand ons project als afhankelijkheid gebruikt.

Vervolgens zullen we zien waar de spring-boot-configuratie-processor haalt de informatie op die wordt gebruikt om de metadata te maken.

4. Configuratie Metadata met @ConfigurationProperties

We definiëren onze eigendommen in een klasse die is geannoteerd met @ConfigurationProperties:

@Configuration @ConfigurationProperties (prefix = "com.baeldung") openbare klasse CustomProperties {/ ** * De URL waarmee verbinding moet worden gemaakt. * / String url; / ** * De tijd om op de verbinding te wachten. * / private int timeoutInMilliSeconds = 1000; // Getters en Setters}

Hier bevat de klasse de eigenschapsnamen, hun typen en eventuele standaardinstellingen in de initialisatielijst. Ook biedt de Javadoc beschrijvingen van elke eigenschap.

Tijdens een build wordt het annotatieprocessor zoekt naar alle klassen die zijn geannoteerd met@ConfigurationProperties. Het genereert metagegevens van aangepaste eigenschappen voor elke instantievariabele van de klasse.

5. Configuratie metagegevensbestand

5.1. Formaat van het metadatabestand

Het metagegevensbestand dat de aangepaste eigenschappen beschrijft, stuurt de contextuele hulp in IntelliJ, bijvoorbeeld:

{"groups": [{"name": "com.baeldung", "type": "com.baeldung.configuration.processor.CustomProperties", "sourceType": "com.baeldung.configuration.processor.CustomProperties"}] , "properties": [{"name": "com.baeldung.url", "type": "java.lang.String", "description": "De url waarmee verbinding moet worden gemaakt.", "sourceType": "com .baeldung.configuration.processor.CustomProperties "}, {" name ":" com.baeldung.timeout-in-milli-seconden "," type ":" java.lang.Integer "," description ":" De tijd tot wacht op de verbinding. "," sourceType ":" com.baeldung.configuration.processor.CustomProperties "," defaultValue ": 1000}]," hints ": []}

Omdat de annotatieprocessor dit bestand voor ons genereert vanuit onze code, is er u hoeft dit bestand niet rechtstreeks te bekijken of te bewerken.

5.2. Metadata zonder een Configuratie-eigenschappen Boon

Als we bestaande eigendommen hebben die niet zijn geïntroduceerd door een @ConfigurationProperties, maar toch hun metadatabestand willen, dan kan IntelliJ helpen.

Laten we het waarschuwingsbericht van eerder nader bekijken:

Hier zien we een Definieer de configuratiesleutel optie, die we kunnen gebruiken om een additionele-spring-configuratie-metadata.json het dossier. Het gemaakte bestand ziet er als volgt uit:

{"properties": [{"name": "com.baeldung.timeoutInMilliSeconds", "type": "java.lang.String", "description": "Beschrijving voor com.baeldung.timeoutInMilliSeconds." }]}

Aangezien er nergens anders informatie over het onroerend goed is, we zullen de metadata erin handmatig moeten bewerken. De standaard type is altijds String.

Laten we wat extra informatie in het bestand stoppen:

{"properties": [{"name": "com.baeldung.timeout-in-milli-seconds", "type": "java.lang.Integer", "description": "De tijd die moet worden gewacht op de verbinding. "," sourceType ":" com.baeldung.configuration.processor.CustomProperties "," defaultValue ": 1000}]}

Merk op dat we dat moeten doen bouw het project opnieuw op om te zien dat de nieuwe eigenschap automatisch wordt aangevuld.

We moeten ook opmerken dat de optie om dit metadatabestand te genereren ook beschikbaar is via de Alt + ENTER-snelkoppeling van IntelliJ over een onbekende eigenschap.

6. Conclusie

In dit artikel hebben we bekeken hoe IntelliJ de metagegevens van de configuratie-eigenschappen gebruikt om hulp te bieden bij onze eigenschappenbestanden.

We hebben gezien hoe we de annotatieprocessor van Spring kunnen gebruiken om de metadata van aangepaste klassen te genereren. Vervolgens hebben we gezien hoe we een snelkoppeling in IntelliJ kunnen gebruiken om een ​​metadatabestand te maken om handmatig te bewerken.

Zoals altijd is de code uit de voorbeelden in dit artikel te vinden op GitHub.