> 文章列表 > SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties

SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties

SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties

@ConfigurationProperties

这个注解不仅可以为yml某个类注入还可以为第三方bean绑定属性

  • 为yml某个类注入

只要将对应的yml类对象声明实体pojo并交给spring容器管理,再在类上使用@ConfigurationProperties绑定对应的类名即可

涉及到两个知识点,这个类对象要交给spring容器管理,则需要将它声明为bean对象,需要用@Conponent注解,第二个需要@ConfigurationProperties(“xxx”),指明为yml中哪个类(xxx)

  • 使用@ConfigurationProperties为第三方bean绑定属性

DruidDataSource 作为第三方的bean它有一个属性为driverClassName

@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){DruidDataSource ds = new DruidDataSource();return ds;
}
datasource:driverClassName: com.mysql.jdbc.Driver

@EnableConfigurationProperties

@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
 

@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication {
}
//@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
}

注意:@EnableConfigurationProperties与@Component不能同时使用

在这里的两个代码其实是冲突的,如果2的注释被放开系统运行将会报错,因为ServerConfig 将被声明为两个同名的bean在spring容器中,这是不被允许的;@EnableConfigurationProperties(ServerConfig.class)代表开启ConfigurationProperties注解并按照括号里面的类进行注入并生成bean,所以是冲突的

@EnableConfigurationProperties不允许单独存在而没有()里面指明的类,这样也会报错找不到对应ServerConfig 的bean,当然这个编译时期就会报错idea会提示你@ConfigurationProperties(prefix = "servers")

解除使用@ConfigurationProperties注释警告

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

宽松绑定

@ConfigurationProperties绑定属性支持属性名宽松绑定

注意:宽松绑定不支持注解@Value引用单个属性的方式 

绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

以下@ConfigurationProperties(prefix = "dataSource")会报错,因为绑定前缀命名命名规则