从2.2到2.3,Spring Boot将@ConfigurationProperties的要求添加回@Component或@EnableConfigurationProperties

时间:2020-08-24 20:32:19

标签: spring spring-boot

我最近将Spring Boot项目从2.2.0版本升级到2.3.1,但是我注意到我在Spring 2.2.0之前出现了一个错误。

未通过@EnableConfigurationProperties注册,标记为Spring组件或未通过@ConfigurationPropertiesScan扫描

打开

@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开始,不再支持它。为什么会这样或我缺少什么?

2 个答案:

答案 0 :(得分:0)

@ConfigurationProperties不会使类成为Spring Component。您还需要在应用程序中添加@ConfigurationPropertiesScan,以启用扫描以@ConfigurationProperties注释的类。

请参见release notes

答案 1 :(得分:0)

在Spring 2.2之前,主类应具有@EnableConfigurationProperties(SftpProperties .class)或在SftpProperties类上方使用@Configuration。

但是在2.2 Spring通过类路径扫描找到并注册@ConfigurationProperties类之后,因此不需要这些注释,您只需使用@ConfigurationPropertiesScan(“ property package path”)注释即可扫描自定义位置的配置属性类。

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