Spring中的@ConditionalOnProperty注解使用详解

 更新时间:2024年01月17日 08:43:32   作者:qq_53639759  
这篇文章主要介绍了Spring中的@ConditionalOnProperty注解使用详解,在 spring boot 中有时候需要控制配置类是否生效,可以使用 @ConditionalOnProperty 注解来控制 @Configuration 是否生效,需要的朋友可以参考下

@ConditionalOnProperty

在 spring boot 中有时候需要控制配置类是否生效,可以使用 @ConditionalOnProperty 注解来控制 @Configuration 是否生效.

示例:

配置类代码

@AutoConfiguration
@ConditionalOnProperty(prefix = "yudao.tenant", value = "enable", havingValue = true) // 允许使用 yudao.tenant.enable=false 禁用多租户
@EnableConfigurationProperties(TenantProperties.class)
public class YudaoTenantAutoConfiguration {
	xxxxxxxxxxxxxxxx
}

配置文件代码

yudao:
  tenant: # 多租户相关配置项
    enable: true

所以当enable=true是,该配置类才会生效

@ConditionalOnProperty源码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
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;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
    String[] value() default {};
    String prefix() default "";
    String[] name() default {};
    String havingValue() default "";
    boolean matchIfMissing() default false;
}

havingValue 和 matchIfMissing 区别

  • havingValue: 表示要匹配的属性值的属性名。当配置文件中该属性的值为指定的值时,类或方法将被条件注解所影响。如果配置文件中未设置该属性,或者属性值不等于指定的值,则类或方法不会被条件注解所影响。
  • matchIfMissing: 表示在配置文件中未找到该属性时是否匹配。默认为 false,表示只有在配置文件中设置了该属性时才会匹配。如果设置为 true,则即使配置文件中未设置该属性,也会匹配。当配置文件中未找到该属性时,如果 matchIfMissing 为 true,则类或方法将被条件注解所影响;如果 matchIfMissing 为 false,则类或方法不会被条件注解所影响。

因此,havingValue 和 matchIfMissing 的区别在于,havingValue 用于指定要匹配的属性值,而 matchIfMissing 用于控制类或方法是否在属性未找到时被条件注解所影响。

到此这篇关于Spring中的@ConditionalOnProperty注解使用详解的文章就介绍到这了,更多相关@ConditionalOnProperty注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中实现文件上传下载的三种解决方案(推荐)

    Java中实现文件上传下载的三种解决方案(推荐)

    这篇文章主要介绍了Java中实现文件上传下载的三种解决方案的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 利用Java实体bean对象批量数据传输处理方案小结

    利用Java实体bean对象批量数据传输处理方案小结

    javabean是对面向对象思想的一种具体实施的表现,本文重点给大家介绍利用Java实体bean对象批量数据传输处理方案小结,本文通过两种方案给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 如何测试Spring MVC应用

    如何测试Spring MVC应用

    这篇文章主要介绍了如何测试Spring MVC应用,帮助大家更好的理解和使用spring框架,感兴趣的朋友可以了解下
    2020-10-10
  • Java算法之递归算法计算阶乘

    Java算法之递归算法计算阶乘

    这篇文章主要为大家详细介绍了Java递归算法计算阶乘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目

    Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目

    这篇文章主要介绍了Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Java通过SSM完成水果商城批发平台流程

    Java通过SSM完成水果商城批发平台流程

    这是一个使用了java+SSM开发的网上水果商城批发平台,是一个实战小练习,具有水果商城批发该有的所有功能,感兴趣的朋友快来看看吧
    2022-06-06
  • 简单聊聊Java程序中的换行符

    简单聊聊Java程序中的换行符

    Java程序中的换行符一般使用“\n”表示,它是一个转义字符,表示换行符。根据操作系统的不同,换行符的实际表示可能不同,本文就来简单聊聊他们的区别与使用吧
    2023-03-03
  • Spring batch批处理框架

    Spring batch批处理框架

    本文主要介绍了Spring batch批处理框架的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-04-04
  • Netty分布式编码器及写数据事件处理使用场景

    Netty分布式编码器及写数据事件处理使用场景

    这篇文章主要为大家介绍了Netty分布式编码器及写数据事件处理使用场景剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,
    2022-03-03
  • SpringCloud feign无法注入接口的问题

    SpringCloud feign无法注入接口的问题

    这篇文章主要介绍了SpringCloud feign无法注入接口的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论