IntelliJ - Не може да разреши грешка в свойствата на конфигурацията на Spring Boot

1. Общ преглед

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

IntelliJ предоставя помощ и автоматично попълване за вградените свойства. Въпреки това се нуждае от малко помощ, за да ги предостави за персонализирани свойства.

В този кратък урок ще разгледаме как да изложим тези свойства на IntelliJ, за да улесним процеса на разработка.

2. Персонализирани свойства

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

Тук URL адресите и времето за изчакване в милисекунди са персонализирани свойства. Можем да видим описание, тип и незадължителна стойност по подразбиране.

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

Това е така, защото без метаданни IntelliJ не може да ни помогне.

Сега нека да разгледаме какво трябва да направим, за да поправим това.

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

Първо, трябва да добавим зависимостта spring-boot-configuration-процесор към нашия pom.xml :

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

В пролетно-ботуш-конфигурация-процесор се извиква всеки път, когато се изгради нашия проект . Той ще създаде файловете с метаданни в t arget / classes / META-INF /.

Зависимостта е маркирана като незадължителна, което означава, че не се наследява, когато някой използва нашия проект като зависимост.

След това ще видим откъде процесорът spring-boot-configuration-процесор получава информацията, използвана за създаване на метаданните.

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 може да помогне.

Нека разгледаме отблизо предупредителното съобщение от преди:

Тук виждаме опция за определяне на конфигурационен ключ , която можем да използваме, за да създадем допълнителен файл spring-configuration-metadata.json . Създаденият файл ще изглежда така:

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

Тъй като няма информация за свойството от никъде другаде, ще трябва да редактираме ръчно метаданните вътре в него. Стандартният вид е всякога и String .

Нека да добавим допълнителна информация във файла:

{ "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.