Перейти к основному содержимому

IntelliJ — не удается устранить ошибку свойств конфигурации Spring Boot

· 4 мин. чтения

1. Обзор

Когда мы внедряем свойства среды выполнения в наши приложения Spring, мы можем определить классы компонентов для групп пользовательских свойств .

IntelliJ предоставляет справку и автозаполнение для встроенных bean-компонентов свойств. Тем не менее, требуется небольшая помощь, чтобы предоставить их для пользовательских свойств.

В этом кратком руководстве мы рассмотрим, как предоставить эти свойства IntelliJ, чтобы упростить процесс разработки.

2. Пользовательские свойства

Давайте посмотрим на экранную справку, которую IntelliJ может предоставить нам в отношении свойств нашего приложения:

./5227bbaad448204aca1e59b3faac1d9e.jpg

Здесь свойства url и время ожидания в миллисекундах являются пользовательскими свойствами. Мы видим описание, тип и необязательное значение по умолчанию.

Но если свойство неизвестно, IntelliJ покажет нам предупреждение:

./88819c6433dacefb626d9a711b36ee87.jpg

Это потому, что без метаданных IntelliJ не может нам помочь.

Теперь давайте посмотрим, что нам нужно сделать, чтобы это исправить.

3. Зависимости

Во- первых, нам нужно добавить зависимость spring-boot-configuration-processor в наш pom.xml :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

Spring -boot-configuration-processor вызывается каждый раз, когда мы собираем наш проект . Он создаст файлы метаданных в t arget/classes/META-INF/.

Зависимость помечена как необязательная, что означает, что она не наследуется, когда кто-то использует наш проект в качестве зависимости.

Далее мы увидим, откуда процессор конфигурации spring-boot получает информацию, используемую для создания метаданных.

4. Метаданные конфигурации с @ConfigurationProperties

Мы определяем наши свойства в классе, аннотированном @ConfigurationProperties :

@Configuration
@ConfigurationProperties(prefix = "com.foreach")
public class CustomProperties {

/**
* The url to connect to.
*/
String url;

/**
* The time to wait for the connection.
*/
private int timeoutInMilliSeconds = 1000;

// Getters and Setters

}

Здесь класс содержит имена свойств, их типы и любые значения по умолчанию, представленные в списке инициализаторов. Кроме того, Javadoc содержит описания каждого свойства.

Во время сборки обработчик аннотаций ищет все классы, аннотированные с помощью @ConfigurationProperties. Он генерирует метаданные пользовательских свойств для каждой переменной экземпляра класса.

5. Файл метаданных конфигурации

5.1. Формат файла метаданных

Файл метаданных, описывающий пользовательские свойства , управляет контекстной справкой в IntelliJ, например:

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

Поскольку процессор аннотаций создает этот файл для нас из нашего кода, нет необходимости просматривать или редактировать этот файл напрямую .

5.2. Метаданные без компонента ConfigurationProperties

Если у нас есть существующие свойства, которые не представлены с помощью @ConfigurationProperties , но все же нам нужен их файл метаданных, то IntelliJ может помочь.

Давайте внимательнее посмотрим на предупредительное сообщение:

./00a34b9e7e30e29364cf90b30e553ef9.jpg

Здесь мы видим параметр « Определить ключ конфигурации », который мы можем использовать для создания файла Additional-spring-configuration-metadata.json . Созданный файл будет выглядеть так:

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

Поскольку нигде больше нет информации о свойстве, нам придется вручную редактировать метаданные внутри него. Тип по умолчанию всегда s String .

Добавим в файл дополнительную информацию:

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

Обратите внимание, что нам нужно будет перестроить проект, чтобы новое свойство появилось в автозаполнении .

Кроме того, следует отметить, что возможность создания этого файла метаданных также доступна с помощью сочетания клавиш IntelliJ Alt+ENTER для неизвестного свойства.

6. Заключение

В этой статье мы рассмотрели, как IntelliJ использует метаданные свойства конфигурации, чтобы предоставить справку по нашим файлам свойств.

Мы увидели, как использовать процессор аннотаций Spring для генерации метаданных из пользовательских классов. Затем мы увидели, как использовать ярлык в IntelliJ для создания файла метаданных для редактирования вручную.

Как всегда, код из примеров в этой статье можно найти на GitHub .