注解@ConditionalOnProperty介绍使用

来源

org.springframework.boot.autoconfigure.condition.ConditionalOnProperty

源码


package org.springframework.boot.autoconfigure.condition;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Conditional;
import org.springframework.core.env.Environment;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {

	String[] value() default {};//字符串数组,获取对应property名称的值,与name不可同时使用

	String prefix() default "";//property名称的前缀,如:my.mq

	String[] name() default {};//字符串数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用

	String havingValue() default "";可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置 

	boolean matchIfMissing() default false;缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错 

	boolean relaxedNames() default true;//是否可以松散匹配。 默认为{@code true}。

}

作用

spring boot通过注解@ConditionalOnProperty来控制注解@Configuration修饰的配置类是否生效

使用说明

通过对比namehavingValue的值来判断是否生效configuration配置类

name来自于application.propertie指定的值,与prefix指定的前缀结合组合完整的property使用

如果name为空则返回false,不为空则与havingValue的值进行比较,相同则返回true且configuration生效,不相同则返回false且configuration不生效

举例

/*
 * @Desc : 比较application.properties中配置的my.mq.clientType值是否与havingValue的值ons相同,如果相同则该配置类生效
 */
@Configuration
@ConditionalOnProperty(
	prefix = "my.mq",
    name = {"clientType"},
    havingValue = "ons",
    matchIfMissing = true
)
public class OnsAutoConfig {
    @Autowired
    private ListenerContainer container;
    @Autowired
    private OnsPublisherHolder onsPublisherHolder;
    @Autowired
    private OnsConsumerInitiator onsConsumerInitiator;

    public OnsAutoConfig() {
    }

    @PostConstruct
    private void onsStartUp() {
        this.container.init();
        this.onsPublisherHolder.init();
        this.onsConsumerInitiator.onConsumerStartUp(this.container.getListeners());
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值