@ConditionalOnProperty注解使用
Posted 唐宋xy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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
都可以使用可以看到,注解的
@Target
属性值为Type
、METHOD
,就表示当前注解在类和方法上都可以使用。 -
使用方式
直接在
@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
中,需要配置在项目的application
的namespace
才可以生效。
以上是关于@ConditionalOnProperty注解使用的主要内容,如果未能解决你的问题,请参考以下文章
详解Spring Boot框架中的@Conditional系列注解
详解Spring Boot框架中的@Conditional系列注解