#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);
}
}