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注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot深入浅出分析初始化器

    SpringBoot深入浅出分析初始化器

    这篇文章主要介绍了SpringBoot初始化器的分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java 泛型超详细入门讲解

    Java 泛型超详细入门讲解

    这篇文章主要介绍了Java基础泛型详情,泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,下面文章的详细介绍,需要的朋友可以参考一下
    2022-04-04
  • Maven之pom.xml文件中的Build配置解析

    Maven之pom.xml文件中的Build配置解析

    这篇文章主要介绍了Maven之pom.xml文件中的Build配置解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • RESTful API设计原则与实现示例详解

    RESTful API设计原则与实现示例详解

    这篇文章主要为大家介绍了RESTful API设计原则与实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Spring OAuth2.0 单元测试解决方案

    Spring OAuth2.0 单元测试解决方案

    这篇文章主要介绍了Spring OAuth2.0 单元测试解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • mybatisplus 复合主键(多主键) CRUD示例详解

    mybatisplus 复合主键(多主键) CRUD示例详解

    这篇文章主要介绍了mybatisplus 复合主键(多主键) CRUD实例详解,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • java 中的static关键字和final关键字的不同之处

    java 中的static关键字和final关键字的不同之处

    java 中的static关键字和final关键字的不同之处,需要的朋友可以参考一下
    2013-03-03
  • spring中使用mybatis plus连接sqlserver的方法实现

    spring中使用mybatis plus连接sqlserver的方法实现

    这篇文章主要介绍了spring中使用mybatis plus连接sqlserver的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解

    spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解

    这篇文章主要介绍了spring boot-2.1.16整合swagger-2.9.2 含yml配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java使用BigDecimal公式精确计算及精度丢失问题

    Java使用BigDecimal公式精确计算及精度丢失问题

    在工作中经常会遇到数值精度问题,比如说使用float或者double的时候,可能会有精度丢失问题,下面这篇文章主要给大家介绍了关于Java使用BigDecimal公式精确计算及精度丢失问题的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论