С 2.2 по 2.3 Spring Boot добавляет обратно требование @Component или @EnableConfigurationProperties для @ConfigurationProperties

#spring #spring-boot

#spring #весенняя загрузка

Вопрос:

Недавно я обновил проект Spring Boot с версии 2.2.0 до 2.3.1, но я заметил ошибку, которую я получал до Spring 2.2.0.

Не зарегистрирован через @EnableConfigurationProperties, помечен как Spring component или отсканирован через @configurationpropertiescan

На

 @Data
@ConfigurationProperties("sftp")
public class SftpProperties {
    String host;
    String user;
    String password;
    String baseDir;
}
  

В более ранней версии Spring Boot — я полагаю, 2.0.2 или что-то в этом роде — у меня был приведенный выше класс, помеченный @Component , чтобы он был обнаружен во время сканирования пути к классу. Но, начиная с 2.2, я прочитал, что в этом больше нет необходимости, поэтому я удалил @Component . Это кажется незначительным улучшением, но начиная с версии 2.3.x оно больше не поддерживается. Почему это так или я что-то упускаю?

Ответ №1:

@ConfigurationProperties не делает класс компонентом Spring. Вам также необходимо добавить @ConfigurationPropertiesScan в ваше приложение, чтобы включить сканирование классов, аннотированных с помощью @ConfigurationProperties .

Смотрите Примечания к выпуску

Ответ №2:

До Spring 2.2 основной класс должен иметь @EnableConfigurationProperties(SftpProperties .class) или использовать @Configuration над вашим классом SftpProperties.

Но после 2.2 Spring находит и регистрирует классы @ConfigurationProperties с помощью сканирования пути к классам, поэтому в этих аннотациях нет необходимости, вы можете просто использовать аннотацию @ConfigurationPropertiesScan («путь к пакету свойств») для сканирования пользовательских местоположений на предмет классов свойств конфигурации.

 @SpringBootApplication
@ConfigurationPropertiesScan("com.app.properties")
public class DemoApplication { 
 
    public static void main(String[] args) {   
        SpringApplication.run(DemoApplication.class, args); 
    } 
}