IntelliJ - Impossibile risolvere l'errore delle proprietà di configurazione di Spring Boot

1. Panoramica

Quando inseriamo proprietà di runtime nelle nostre applicazioni Spring, possiamo definire classi di bean per gruppi di proprietà personalizzate.

IntelliJ fornisce la guida e il completamento automatico per i bean di proprietà incorporati. Tuttavia, è necessario un piccolo aiuto per fornirli per le proprietà personalizzate.

In questo breve tutorial, vedremo come esporre queste proprietà a IntelliJ per semplificare il processo di sviluppo.

2. Proprietà personalizzate

Diamo un'occhiata alla guida su schermo che IntelliJ può fornirci riguardo alle proprietà della nostra applicazione:

In questo caso, l' URL delle proprietà e il timeout in millisecondi sono proprietà personalizzate. Possiamo vedere una descrizione, un tipo e un valore predefinito opzionale.

Ma, se una proprietà è sconosciuta, IntelliJ ci mostrerà un avviso:

Questo perché, senza metadati, IntelliJ non può aiutarci.

Ora diamo un'occhiata a cosa dobbiamo fare per risolvere questo problema.

3. Dipendenze

Per prima cosa, dobbiamo aggiungere la dipendenza spring-boot-configuration-processor al nostro pom.xml :

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

Il processore di configurazione dell'avvio a molla viene richiamato ogni volta che creiamo il nostro progetto . Creerà i file di metadati in t arget / classes / META-INF /.

La dipendenza è contrassegnata come opzionale, il che significa che non viene ereditata quando qualcuno usa il nostro progetto come dipendenza.

Successivamente, vedremo dove il processore di configurazione dell'avvio a molla ottiene le informazioni utilizzate per creare i metadati.

4. Metadati di configurazione con @ConfigurationProperties

Definiamo le nostre proprietà in una classe annotata con @ConfigurationProperties :

@Configuration @ConfigurationProperties(prefix = "com.baeldung") public class CustomProperties { /** * The url to connect to. */ String url; /** * The time to wait for the connection. */ private int timeoutInMilliSeconds = 1000; // Getters and Setters }

Qui, la classe contiene i nomi delle proprietà, i loro tipi e tutti i valori predefiniti forniti nell'elenco degli inizializzatori. Inoltre, Javadoc fornisce descrizioni di ciascuna proprietà.

Durante una compilazione, il processore di annotazione cerca tutte le classi annotate con @ConfigurationProperties. Genera metadati di proprietà personalizzate per ogni variabile di istanza della classe.

5. File di metadati di configurazione

5.1. Formato del file di metadati

Il file di metadati che descrive le proprietà personalizzate guida la guida contestuale in IntelliJ, ad esempio:

{ "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": "The url to connect to.", "sourceType": "com.baeldung.configuration.processor.CustomProperties" }, { "name": "com.baeldung.timeout-in-milli-seconds", "type": "java.lang.Integer", "description": "The time to wait for the connection.", "sourceType": "com.baeldung.configuration.processor.CustomProperties", "defaultValue": 1000 } ], "hints": [] }

Poiché il processore di annotazioni genera questo file per noi dal nostro codice, non è necessario guardare o modificare direttamente questo file .

5.2. Metadati senza un bean ConfigurationProperties

Se disponiamo di proprietà esistenti che non vengono introdotte da @ConfigurationProperties , ma vogliamo comunque il loro file di metadati, IntelliJ può essere d'aiuto.

Diamo un'occhiata più da vicino al messaggio di avviso di prima:

Qui vediamo un'opzione Definisci chiave di configurazione , che possiamo usare per creare un file additional-spring-configuration-metadata.json . Il file creato sarà simile a:

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

Poiché non ci sono informazioni sulla proprietà da nessun'altra parte, dovremo modificare manualmente i metadati al suo interno. Il tipo predefinito è sempre s String .

Mettiamo alcune informazioni extra nel file:

{ "properties": [ { "name": "com.baeldung.timeout-in-milli-seconds", "type": "java.lang.Integer", "description": "The time to wait for the connection.", "sourceType": "com.baeldung.configuration.processor.CustomProperties", "defaultValue": 1000 } ] }

Nota che avremo bisogno di ricostruire il progetto per vedere la nuova proprietà apparire in completamento automatico .

Inoltre, dovremmo notare che l'opzione per generare questo file di metadati è disponibile anche tramite il collegamento Alt + INVIO di IntelliJ su una proprietà sconosciuta.

6. Conclusione

In questo articolo, abbiamo esaminato il modo in cui IntelliJ utilizza i metadati delle proprietà di configurazione per fornire assistenza con i nostri file delle proprietà.

Abbiamo visto come utilizzare il processore di annotazioni di Spring per generare i metadati dalle classi personalizzate. Quindi, abbiamo visto come utilizzare un collegamento in IntelliJ per creare un file di metadati da modificare manualmente.

Come sempre, il codice degli esempi in questo articolo può essere trovato su GitHub.