IntelliJ - Impossible de résoudre l'erreur des propriétés de configuration de Spring Boot

1. Vue d'ensemble

Lorsque nous injectons des propriétés d'exécution dans nos applications Spring, nous pouvons définir des classes de bean pour des groupes de propriétés personnalisées.

IntelliJ fournit une aide et une saisie semi-automatique pour les beans de propriétés intégrés. Cependant, il a besoin d'un peu d'aide pour les fournir pour les propriétés personnalisées.

Dans ce court didacticiel, nous verrons comment exposer ces propriétés à IntelliJ pour faciliter le processus de développement.

2. Propriétés personnalisées

Jetons un coup d'œil à l'aide à l'écran qu'IntelliJ peut nous fournir concernant les propriétés de notre application:

Ici, les propriétés url et timeout-in-milliseconds sont des propriétés personnalisées. Nous pouvons voir une description, un type et une valeur par défaut facultative.

Mais, si une propriété est inconnue, IntelliJ nous montrera un avertissement:

En effet, sans métadonnées, IntelliJ ne peut pas nous aider.

Voyons maintenant ce que nous devons faire pour résoudre ce problème.

3. Dépendances

Tout d'abord, nous devons ajouter la dépendance spring-boot-configuration-processor à notre pom.xml :

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

Le processeur de configuration spring-boot est appelé à chaque fois que nous construisons notre projet . Il créera les fichiers de métadonnées dans le t arget / classes / META-INF /.

La dépendance est marquée comme facultative, ce qui signifie qu'elle n'est pas héritée lorsque quelqu'un utilise notre projet comme dépendance.

Ensuite, nous verrons où le processeur de configuration spring-boot obtient les informations utilisées pour créer les métadonnées.

4. Métadonnées de configuration avec @ConfigurationProperties

Nous définissons nos propriétés dans une classe annotée avec @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 }

Ici, la classe contient les noms de propriétés, leurs types et toutes les valeurs par défaut fournies dans la liste d'initialisation. En outre, le Javadoc fournit des descriptions de chaque propriété.

Lors d'une génération, le processeur d'annotations recherche toutes les classes annotées avec @ConfigurationProperties. Il génère des métadonnées de propriété personnalisées pour chaque variable d'instance de la classe.

5. Fichier de métadonnées de configuration

5.1. Format du fichier de métadonnées

Le fichier de métadonnées qui décrit les propriétés personnalisées pilote l'aide contextuelle dans IntelliJ, par exemple:

{ "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": [] }

Comme le processeur d'annotations génère ce fichier pour nous à partir de notre code, il n'est pas nécessaire de consulter ou de modifier ce fichier directement .

5.2. Métadonnées sans bean ConfigurationProperties

Si nous avons des propriétés existantes qui ne sont pas introduites par un @ConfigurationProperties , mais que nous voulons toujours leur fichier de métadonnées, alors IntelliJ peut vous aider.

Examinons de plus près le message d'avertissement précédent:

Ici, nous voyons une option Définir la clé de configuration , que nous pouvons utiliser pour créer un fichier additional-spring-configuration-metadata.json . Le fichier créé ressemblera à:

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

Comme il n'y a aucune information sur la propriété de nulle part ailleurs, nous devrons modifier manuellement les métadonnées à l'intérieur. Le type par défaut est toujours String .

Mettons quelques informations supplémentaires dans le fichier:

{ "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 } ] }

Notez que nous devrons reconstruire le projet pour voir la nouvelle propriété apparaître en saisie semi-automatique .

En outre, nous devons noter que l'option pour générer ce fichier de métadonnées est également disponible via le raccourci Alt + ENTRÉE d'IntelliJ sur une propriété inconnue.

6. Conclusion

Dans cet article, nous avons examiné comment IntelliJ utilise les métadonnées de propriété de configuration pour fournir de l'aide sur nos fichiers de propriétés.

Nous avons vu comment utiliser le processeur d'annotations de Spring pour générer les métadonnées à partir de classes personnalisées. Ensuite, nous avons vu comment utiliser un raccourci dans IntelliJ pour créer un fichier de métadonnées à modifier manuellement.

Comme toujours, le code des exemples de cet article se trouve à l'adresse over sur GitHub.