@ConditionalOnProperty注解使用

在日常的开发中,经常遇到当某些条件不满足是不加载bean或者在某一段时间不加载某些配置,或者在不同的机房中使用不同的配置,那么就需要控制这个bean在不同的条件下是否需要加载,那么这个时候就需要根据配置或者某些条件来控制配置是否启用。那么如何控制spring的bean,@ConditionalOnProperty注解会告诉你

@ConditionalOnProperty注解

  • 作用

    在Spring Boot的自动配置中经常看到@ConditionalOnProperty注解的使用,这个注解就是控制在指定的条件下,是否需要加载这个bean

  • 属性说明

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.TYPE, ElementType.METHOD })
    @Documented
    @Conditional(OnPropertyCondition.class)
    public @interface ConditionalOnProperty {
    
        // 数组,获取对应property名称的值,与name不可同时使用
        String[] value() default {};
    
        // 配置属性名称的前缀,比如spring.http
        String prefix() default "";
    
        // 数组,配置属性完整名称或部分名称
        // 可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用
        String[] name() default {};
    
        // 获取配置文件中key为name属性的值,比较该值与havingValue给定的值是否相同,相同才加载配置
        String havingValue() default "";
    
        // 如果为true,没有该配置属性时也会正常加载;反之则不会生效,表示配置文件中如果没有name属性配置的key
        boolean matchIfMissing() default false;
    
    }
    
  • 使用范围

    在指定的class或者method都可以使用

    image-20210529213710339

    可以看到,注解的@Target属性值为TypeMETHOD,就表示当前注解在类和方法上都可以使用。

  • 使用方式

    直接在@Configuration@Bean上同级进行使用,如果满足条件就表示可以加载该类,如果不满足条件就不加载这个bean到Spring容器中

    @Configuration
    @ConditionalOnProperty(name = "enable.user.config", havingValue = "true")
    public class UserInfoConfig {
        
        @Bean(name = "USER_LOAD")
        @ConditionalOnProperty(name = "enable.user.bean", havingValue = "true")
        public User user() {
          	User user = new User();
            return user;
        }
    
    }
    

    上面的配置使用了@ConditionalOnProperty注解,那么表示如果配置文件中key为load.user.bean的值如果是havingValue的值(即true),那么就表示加载这个配置类和Bean,如果为false或者没有配置这个key,默认也是false,即不加载这个配置。

    这样通过这个注解,就可以控制在指定的条件下,灵活的配置是否需要加载某些配置,将配置和硬编码进行解耦,提高灵活性和扩展性。

apollo配置踩坑

如果需要将@ConditionalOnProperty(name = "enable.user.config", havingValue = "true")中的enable.user.config配置到apollo中,那么有点小问题需要注意,否则配置之后不生效

  • 增加apollo配置

    在项目本地目录下的application.properties中增加apollo.bootstrap.enabled = true配置

  • 配置命令空间

    如果需要将enable.user.config配置在apollo配置中心,方便管理和热更新,那么不能配置到其他的namespace中,需要配置在项目的applicationnamespace才可以生效。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值