Spring中的@ConfigurationProperties注解

@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标准进行属性校验,并且支持多种类型的转换,例如将属性转换为DurationDataSize对象。

总结

@ConfigurationProperties 注解提供了一种灵活且强大的方式来管理Spring Boot应用中的配置属性。它不仅支持基本的属性绑定,还支持嵌套属性、属性校验和类型转换,使得配置管理更加简洁和高效。

猜你喜欢

转载自blog.csdn.net/m0_69815481/article/details/145302834
今日推荐