首页 > 其他分享 >Spring注解之@ConditionalOnProperty

Spring注解之@ConditionalOnProperty

时间:2024-12-05 17:58:34浏览次数:7  
标签:name Spring my ConditionalOnProperty 注解 加载 true 属性

@ConditionalOnProperty 是 Spring Framework 提供的一个注解,用于控制某个配置类或 Bean 是否加载到 Spring 容器中。它的行为取决于某些配置属性的值。

作用

@ConditionalOnProperty 会检查指定的配置属性(通常来自 application.ymlapplication.properties 文件),如果属性满足指定的条件,则加载对应的配置类或 Bean;否则不会加载。

具体用法

在你的代码中:

@ConditionalOnProperty(name = "x.xx", havingValue = "AB")

含义:
当配置文件中 x.xx 的值为 "AB" 时,Config 类中的 Bean 和配置会被加载到 Spring 容器中。如果该属性不存在,或者值不是 "AB",则 Config 不会被加载。


配置文件

你的配置文件中有以下内容:

x:
  xx:AB

因为 xx 的值是 "AB",所以 Config 配置类会被加载。


参数说明

@ConditionalOnProperty 的常用参数有以下几个:

  1. name
    配置属性的名称,可以是单个,也可以是一个数组。

    @ConditionalOnProperty(name = "openapi.third.platform.platformKey", havingValue = "BOSHI-Hithium")

    如果有多个 name 值,必须同时满足。

  2. havingValue(可选)
    指定属性值必须匹配的值。如果不指定,则只检查属性是否存在。

    @ConditionalOnProperty(name = "my.property.name", havingValue = "true")
  3. matchIfMissing(可选)
    默认值为 false,表示如果属性缺失,条件不满足;
    如果设置为 true,则当属性缺失时,条件仍然满足。

    @ConditionalOnProperty(name = "my.property.name", matchIfMissing = true)

示例

1. 根据属性值加载配置

如果 application.yml 中有如下配置:

my:
  feature:
    enable: true

代码中:

@ConditionalOnProperty(name = "my.feature.enable", havingValue = "true")
@Configuration
public class MyFeatureConfig {
    // 配置代码
}

只有当 my.feature.enabletrue 时,MyFeatureConfig 才会被加载。


2. 属性缺失时加载
@ConditionalOnProperty(name = "my.feature.enable", matchIfMissing = true)
@Configuration
public class MyFeatureConfig {
    // 配置代码
}

my.feature.enable 属性不存在时,MyFeatureConfig 仍然会被加载。


适用场景

  • 环境切换: 根据环境变量加载不同的配置。
  • 功能开关: 控制特定功能是否启用。
  • 模块隔离: 根据配置动态加载某些模块。

你的代码中,@ConditionalOnProperty 的作用是确保 Config 仅在 Key"AB" 的情况下加载,适用于多平台场景的动态配置切换。

标签:name,Spring,my,ConditionalOnProperty,注解,加载,true,属性
From: https://blog.csdn.net/m0_57764322/article/details/144272558

相关文章

  • 模拟JUnit框架:创建自定义测试注解和运行器
    模拟JUnit框架:创建自定义测试注解和运行器引言在软件开发中,单元测试是保证代码质量的重要环节。JUnit是一个流行的Java单元测试框架,它提供了@Test注解来标记测试方法,并且有内置的机制来发现并执行这些测试。本文将通过一个简单的例子展示如何使用Java的注解和反射机制模拟JUnit......
  • Spring Boot教程之十八:Cache Provider
    SpringBoot–CacheProviderSpring框架支持透明地向应用程序添加缓存。CacheProvider授权程序员在应用程序中明确配置缓存。它整合了各种CacheProvider,例如EhCache、Redis、Guava、Caffeine等 。它使经常访问的对象、图像和数据更靠近您需要它们的位置,通过不多次访问......
  • Spring Boot教程之十九:日志记录
    SpringBoot–日志记录SpringBoot中的日志记录在SpringBoot应用程序中起着至关重要的作用,用于记录应用程序内的信息、操作和事件。它还用于监视应用程序的性能、了解应用程序的行为以及识别应用程序内的问题。SpringBoot通过提供各种日志记录框架来提供灵活的日志记......
  • IntelliJ+SpringBoot项目实战(27)--实现国际化项目开发
        因为有时候承接一些国外项目,项目需要支持国际化。国际化包括页面静态文字的国际化,接口中返回的信息的国际化,JS脚本里内容的国际化。一、配置国际化语言    在openjweb-core工程中增加默认国际化语言配置类:packageorg.openjweb.core.config;importja......
  • 深入理解 @Target 和 @Retention 注解
    深入理解@Target和@Retention注解在Java中,注解是一种元数据,为代码提供额外信息。在自定义注解时,@Target和@Retention是两个非常重要的元注解,它们用于控制注解的适用范围和生命周期。本文将详细介绍这两个注解的作用,尤其是在下面这个示例中的使用场景:@Target(ElementTyp......
  • 深入解析Java注解机制:获取注解数据的原理
    深入解析Java注解机制:获取注解数据的原理引言在Java编程中,注解(Annotation)是一种元数据形式,它提供了关于程序代码的数据,但它们并不是程序本身的一部分。注解可以用于编译时或运行时处理,以提供额外的信息或者影响程序行为。本文将深入探讨如何解析Java中的注解,并介绍AnnotatedElem......
  • springboot毕设 青少年视力筛查系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代科技的飞速发展,青少年群体对于电子产品的依赖程度日益加深,长时间面对屏幕不仅改变了他们的生活方式,也对视力健康构成了严峻挑战。近年来,我国......
  • springboot毕设 汽车管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代科技的飞速发展,汽车行业正经历着前所未有的变革。智能化、信息化已成为汽车产业发展的新趋势。在这一背景下,汽车管理系统的研发显得尤为重要......
  • SpringSecurity - [01] 概述
    SpringSecurity是一个灵活且强大的工具,可以帮助你构建安全可靠的Spring应用程序。它不仅简化了认证和授权的过程,而且还提供了丰富的特性和扩展点,使得开发者可以根据项目的独特需求定制安全策略。无论是小型的内部工具还是大型的企业级应用,SpringSecurity都能提供必要的安全保......
  • Spring Cloud 2024 正式发布,王炸级更新!!
    大家好,我是R哥。2024年都接近尾声了,SpringCloud2024正式版才刚刚发布,真是姗姗来迟啊。SpringCloud2024从里程碑版本到正式版本,一共发布了4次版本:2024.0.02024.0.0-RC12024.0.0-M22024.0.0-M1来看看最新的版本情况:SpringCloud2024,代号:Moorgate,关于版本的命名......