@ConfigurationProperties 注解是Spring Boot中用于管理配置属性的一种方式。它允许开发者将配置文件中的属性绑定到Java Bean上,从而简化了配置管理。这个注解通常与@EnableConfigurationProperties 或 @ConfigurationPropertiesScan 一起使用,以便Spring Boot能够自动扫描和绑定配置属性。
使用@ConfigurationProperties的方法
基本使用
在类上使用@ConfigurationProperties 注解,可以将配置文件中的属性绑定到该类的字段上。例如,如果有一个配置文件中包含了邮件服务器的配置,可以这样使用:
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
private String hostName;
private int port;
private String from;
// 标准的getter和setter方法
}
在这个例子中,prefix = "mail" 指定了配置文件中属性的前缀。Spring Boot会自动将前缀为mail的属性绑定到ConfigProperties 类的相应字段上。
mail:
hostName: xxxx
port: xxx
from: xxx
与@ConfigurationPropertiesScan一起使用
从Spring Boot 2.2开始,可以使用@ConfigurationPropertiesScan 注解来指定配置属性类的扫描路径。这样,就不需要在类上添加@Component 或其他注解了。例如:
@SpringBootApplication
@ConfigurationPropertiesScan("com.example.configurationproperties")
public class EnableConfigurationDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EnableConfigurationDemoApplication.class, args);
}
}
嵌套属性
@ConfigurationProperties 还支持嵌套属性,可以在属性中嵌套List、Map和类。例如:
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
private String host;
private int port;
private String from;
private List<String> defaultRecipients;
private Map<String, String> additionalHeaders;
private Credentials credentials;
// 标准的getter和setter方法
}
在@Bean方法上使用
@ConfigurationProperties 也可以用于@Bean注解的方法上,这对于绑定到第三方组件特别有用。例如:
@Configuration
public class ConfigProperties {
@Bean
@ConfigurationProperties(prefix = "item")
public Item item() {
return new Item();
}
}
不可变的@ConfigurationProperties绑定
从Spring Boot 2.2开始,可以使用@ConstructorBinding 注解来实现不可变的配置属性绑定。这意味着被@ConfigurationProperties 注解的类现在可以是不可变的。例如:
@ConfigurationProperties(prefix = "mail.credentials")
@ConstructorBinding
public class ImmutableCredentials {
private final String authMethod;
private final String username;
private final String password;
// 构造器和getter方法
}
属性校验和类型转换
@ConfigurationProperties 支持使用JSR-380标准进行属性校验,并且支持多种类型的转换,例如将属性转换为Duration或DataSize对象。
总结
@ConfigurationProperties 注解提供了一种灵活且强大的方式来管理Spring Boot应用中的配置属性。它不仅支持基本的属性绑定,还支持嵌套属性、属性校验和类型转换,使得配置管理更加简洁和高效。