@ConditionalOnProperty使用详解

@ConditionalOnProperty注解是用来作为条件,配置它所配置的类等是否生效。
1,@ConditionalOnProperty源代码


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
    String[] value() default {};//与name相同作用

    String prefix() default "";//配置文件中的前缀

    String[] name() default {};//配置文件中的名称

    String havingValue() default "";//name对应的值

    boolean matchIfMissing() default false;//缺少配置时是否生效
}

2,使用方式
随便一个例子说明:
(1)配置文件
这是分布式锁启用配置类开关,为true表示启用分布式锁

redission.enable=true

(2)
注入分布式锁RLock的Bean,打上注解。
prefix:配置前缀redission
name:后缀enable
havingValue:该值与redission.enable配置的值相同,则注入RLock的Bean生效
matchIfMissing:true标识如果没有配置redission.enable=true,默认是生效的,false默认没有配置不生效


@Configuration
public class CommonConfig {


    @Bean
    @ConditionalOnProperty(prefix = "redission", name = "enable", havingValue = "true", matchIfMissing = true)
    public RLock rLock() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redisson = Redisson.create(config);
        return redisson.getLock("lock");
    }
}

此时如果配置文件中redission.enable=false,则失败。

猜你喜欢

转载自blog.csdn.net/weixin_38019299/article/details/103879895