@ConditionalOnProperty来控制Configuration是否生效

一、Spring Boot通过@ConditionalOnProperty来控制Configuration是否生效

二、内部属性介绍

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

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

    //property名称的前缀,可有可无 
    String prefix() default ""; 
  
    //数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用 
    String[] name() default {}; 
  
    //可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置  
    String havingValue() default "";
  
    //缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错  
    boolean matchIfMissing() default false;
} 
}

3、使用方法

  • 通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。
  • 如果该值为空,则返回false;
  • 如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
  • 如果返回值为false,则该configuration不生效;为true则生效。

4、code

@Configuration
//在application.yml"mqtt.enabled",对应的值为true
@ConditionalOnProperty(value = "mqtt.enabled", havingValue = "true")
public class MqttInConfig {

    private final MqttMsgHandler mqttMsgHandler;
    @Autowired
    private MqttProperties mqttProperties;

    public MqttInConfig(MqttMsgHandler mqttMsgHandler) {
        this.mqttMsgHandler = mqttMsgHandler;
    }
}

一、Spring Boot通过@ConditionalOnProperty来控制Configuration是否生效

二、内部属性介绍

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

    //数组,获取对应property名称的值,与name不可同时使用  
    String[] value() default {}; 
  
    //property名称的前缀,可有可无
    String prefix() default "";  
  
    //数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用  
    String[] name() default {};
  
    String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置  
  
    //缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错  
    boolean matchIfMissing() default false;
  
    //是否可以松散匹配
    boolean relaxedNames() default true;  
} 
}

3、使用方法

  • 通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。
  • 如果该值为空,则返回false;
  • 如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
  • 如果返回值为false,则该configuration不生效;为true则生效。

4、code

@Configuration
//在application.yml"mqtt.enabled",对应的值为true
@ConditionalOnProperty(value = "mqtt.enabled", havingValue = "true")
public class MqttInConfig {

    private final MqttMsgHandler mqttMsgHandler;
    @Autowired
    private MqttProperties mqttProperties;

    public MqttInConfig(MqttMsgHandler mqttMsgHandler) {
        this.mqttMsgHandler = mqttMsgHandler;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。