Spring中@ConditionalOnProperty注解的作用详解

 更新时间:2024年01月19日 11:05:06   作者:bat在等我  
这篇文章主要介绍了Spring中@ConditionalOnProperty注解的作用详解,@ConditionalOnProperty注解主要是用来判断配置文件中的内容来决定配置类是否生效用的,如果条件不匹配,则配置类不生效,需要的朋友可以参考下

@ConditionalOnProperty注解

@ConditionalOnProperty注解主要是用来判断配置文件中的内容来决定配置类是否生效用的,如果条件不匹配,则配置类不生效

1. 源码

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
	// 数组,获取对应property名称的值,与name不可同时使用
	String[] value() default {};
	// 配置属性名称的前缀,比如spring.http.encoding
	String prefix() default "";
	// 数组,配置属性完整名称或部分名称
	// 可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用
	String[] name() default {};
	// 可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
	String havingValue() default "";
	// 缺少该配置属性时是否可以加载。如果为true,没有该配置属性时也会正常加载;反之则不会生效
	boolean matchIfMissing() default false;
}
  1. String[] value():属性的名字,可与prefix组合使用,不可以与name同时使用
  2. String prefix():属性的前缀,可与name组合使用
  3. String[] name():属性的名字,可与prefix组合使用
  4. String havingValue():指定属性的值和havingValue相同才会加载配置
  5. boolean matchIfMissing():缺少该配置属性是否可以加载,默认flase,如果少了不能加载;设置为true则缺少也可以加载

2. 范例

以swagger配置来举例

配置文件

swagger:
  enabled: true

代码

@EnableSwagger2
@Configuration
@ConditionalOnProperty(name = "swagger.enabled", havingValue = "true") // 如果配置文件中swagger.enabled的值为false,那么havingValue返回结果为false,该配置类就不生效
public class ErpSwaggerConfig extends DefaultSwaggerConfig {
    @Bean
    public Docket erpApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("erp")
                .genericModelSubstitutes(DeferredResult.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .pathMapping("/")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ztbase.erp.controller"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(setSecuritySchemes())
                .globalOperationParameters(getHeaderParameters())
                .apiInfo(apiInfo());
    }
}

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

相关文章

  • java注解实现websocket服务的两种方式

    java注解实现websocket服务的两种方式

    Java WebSocket是一种基于TCP协议的双向全双工消息传输技术,它允许服务器和客户端之间实时通信,具有低延迟和高效率的特点,下面这篇文章主要给大家介绍了关于java注解实现websocket服务的两种方式,需要的朋友可以参考下
    2024-08-08
  • Java中的FilterOutputStream 简介_动力节点Java学院整理

    Java中的FilterOutputStream 简介_动力节点Java学院整理

    FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。接下来通过本文给大家简单介绍下FilterOutputStream知识,需要的朋友参考下吧
    2017-05-05
  • 简单理解java泛型的本质(非类型擦除)

    简单理解java泛型的本质(非类型擦除)

    泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。下面小编来简单讲一讲泛型
    2019-05-05
  • 基于ChatGPT+SpringBoot实现智能聊天AI机器人接口并上线至服务器的方法

    基于ChatGPT+SpringBoot实现智能聊天AI机器人接口并上线至服务器的方法

    ChatGPT是一款基于自然语言处理技术的聊天机器人,ChatGPT可以模拟真实的人类对话,并能够更贴近用户的需求,提供更有价值的服务,这篇文章主要介绍了基于ChatGPT+SpringBoot实现智能聊天AI机器人接口并上线至服务器,需要的朋友可以参考下
    2023-02-02
  • Mybatis-Plus字段策略FieldStrategy的使用

    Mybatis-Plus字段策略FieldStrategy的使用

    本文主要介绍了Mybatis-Plus字段策略FieldStrategy的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • tomcat目录结构简介_动力节点Java学院整理

    tomcat目录结构简介_动力节点Java学院整理

    这篇文章主要介绍了tomcat目录结构简介_动力节点Java学院整理的相关资料,需要的朋友可以参考下
    2017-07-07
  • JavaEE线程安全实现线程池方法

    JavaEE线程安全实现线程池方法

    这篇文章主要介绍了JavaEE线程安全实现线程池方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • 我从jdk1.8升级到jdk11所遇到的坑都有这些

    我从jdk1.8升级到jdk11所遇到的坑都有这些

    这篇文章主要介绍了从jdk1.8升级到jdk11将会遇到的一些坑,本文给大家分享解决方案对大家的学习或工作具有参考借鉴价值,对jdk1.8升级到jdk11相关知识感兴趣的朋友,快来看看吧
    2021-08-08
  • MyBatis-Plus如何使用枚举自动关联注入详解

    MyBatis-Plus如何使用枚举自动关联注入详解

    这篇文章主要给大家介绍了关于MyBatis-Plus如何使用枚举自动关联注入的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用MyBatis-Plus具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Java实现图书馆借阅系统

    Java实现图书馆借阅系统

    这篇文章主要为大家详细介绍了Java实现图书馆借阅系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论