Рубрики
Без рубрики

IntelliJ – Не удается устранить ошибку Свойств конфигурации загрузки Spring

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

Автор оригинала: baeldung.

1. Обзор

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Мы определяем наши свойства в классе с аннотацией @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

}

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

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

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

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

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

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

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

5.2. Метаданные без компонента свойств конфигурации

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

Давайте поближе рассмотрим предупреждающее сообщение из предыдущего:

Здесь мы видим параметр Define configuration key , который мы можем использовать для создания файла additional-spring-configuration-metadata.json . Созданный файл будет выглядеть следующим образом:

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

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

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

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

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

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

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

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

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

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