本文概述
@ConfigurationProperties(ignoreInvalidFields = xxx,ignoreUnknownFields = xxx)作用
把配置文件中的属性绑定到我们的java对象中
参数ignoreInvalidFields =true解析
忽略绑定失败的属性,且赋值为null
参数ignoreUnknownFields = false解析
yml配置文件中的字段,ymlConfigurationProperties中并没有配置,启动时会报错,提示此属性还未绑定。(用于参数绑定的时候检查)
/**
* @author 张子行
* @class 必须要有get、set方法
* ignoreInvalidFields=true: 忽略绑定失败的值,只是为null
* ignoreUnknownFields = false: yml配置文件中的字段,ymlConfigurationProperties中并没有配置,启动时会报错,提示此属性还未绑定
*/
@Slf4j
@Component
@Data
//yml或者properties文件中存在 key:enAble value:enAble的键值对,此配置文件才会生效
@ConditionalOnProperty(name = "enAble", havingValue = "enAble")
//绑定前缀为a的属性,忽略绑定失败的属性
@ConfigurationProperties(prefix = "a", ignoreInvalidFields = true)
public class ymlConfigurationProperties {
private String name = "cName";
private Integer price = 200;
/**
* 注入yml配置文件属性失败或者yml配置文件中此属性并没有赋值,那么默认值为false
*/
private Boolean enable = false;
private String unkonwn = null;
/**
* 绑定list类型
*/
private List<String> list = null;
/**
* 绑定Duration类型
*/
private Duration duration = Duration.ofSeconds(1);
/**
* 绑定DataSize类型
*/
private DataSize dataSize = DataSize.ofMegabytes(1);
/**
* 绑定map类型
*/
Map<String, String> map;
/**
* ioc容器中没有此bean(testBean),onMissTestBean才会注入
*/
@Bean
@ConditionalOnMissingBean(testBean.class)
public void onMissTestBean() {
System.out.println("ConditionalOnMissingBean注解生效:");
}
/**
* ioc容器中有bean(testBean),onTestBean才会生效
*/
@Bean
@ConditionalOnBean(testBean.class)
public void onTestBean(){
System.out.println("ConditionalOnBean注解生效");
}
}
参数prefix = "a"解析
匹配yml中前缀为a的属性
编写yml有提示
加入如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
@ConditionalOnMissingBean(testBean.class)解析
容器中缺少指定bean,才会生效,与@Bean标签配套使用
@ConditionalOnProperty(name = “enAble”, havingValue = “enAble”)解析
yml或者properties文件中存在 key:enAble value:enAble的键值对(&&的关系),此配置文件才会生效
@ConditionalOnBean(testBean.class)解析
- 一般用来指定数据源的相关配置: @ConditionalOnBean(DataSource.class)
容器中存在指定bean,才会生效,与@Bean标签配套使用
速成各种数据类型绑定对照
- 必须要提供get、set方法
- private Boolean enable = false 绑定yml配置文件属性失败或者yml配置文件中此属性并没有赋值,那么默认值为false
/**
* @author 张子行
* @class 必须要有get、set方法
* ignoreInvalidFields=true: 忽略绑定失败的值,只是为null
* ignoreUnknownFields = false: yml配置文件中的字段,ymlConfigurationProperties中并没有配置,启动时会报错,提示此属性还未绑定
*/
@Slf4j
@Component
@Data
//yml或者properties文件中存在 key:enAble value:enAble的键值对,此配置文件才会生效
@ConditionalOnProperty(name = "enAble", havingValue = "enAble")
//绑定前缀为a的属性,忽略绑定失败的属性
@ConfigurationProperties(prefix = "a", ignoreInvalidFields = true)
public class ymlConfigurationProperties {
private String name = "cName";
private Integer price = 200;
/**
* 注入yml配置文件属性失败或者yml配置文件中此属性并没有赋值,那么默认值为false
*/
private Boolean enable = false;
private String unkonwn = null;
/**
* 绑定list类型
*/
private List<String> list = null;
/**
* 绑定Duration类型
*/
private Duration duration = Duration.ofSeconds(1);
/**
* 绑定DataSize类型
*/
private DataSize dataSize = DataSize.ofMegabytes(1);
/**
* 绑定map类型
*/
Map<String, String> map;
/**
* ioc容器中没有此bean(testBean),onMissTestBean才会注入。
*/
@Bean
@ConditionalOnMissingBean(testBean.class)
public void onMissTestBean() {
System.out.println("ConditionalOnMissingBean注解生效:");
}
/**
* ioc容器中有bean(testBean),onTestBean才会生效
*/
@Bean
@ConditionalOnBean(testBean.class)
public void onTestBean(){
System.out.println("ConditionalOnBean注解生效");
}
}
Duration类型单位参照
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)
DataSize类型单位参照
- B for bytes
- KB for kilobytes
- MB for megabytes
- GB for gigabytes
- TB for terabytes
a:
name: zzh
price: 100
enable: true
unkonwn: unKonwn
duration: 2h
dataSize: 5MB
list:
- 1
- 2
map:
mKey1: 'mValue1'
mKey2: 'mValue2'