搞懂@ConfigurationProperties、@ConditionalOnProperty、@ConditionalOnMissingBean一篇文章就够了

@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'

代码获取

https://github.com/zhangzihang3/-workHarvestCode.git

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小咸鱼的技术窝

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值