@ConditionalOnProperty
是 Spring Framework 提供的一个注解,用于控制某个配置类或 Bean 是否加载到 Spring 容器中。它的行为取决于某些配置属性的值。
作用
@ConditionalOnProperty
会检查指定的配置属性(通常来自application.yml
或application.properties
文件),如果属性满足指定的条件,则加载对应的配置类或 Bean;否则不会加载。
具体用法
在你的代码中:
@ConditionalOnProperty(name = "x.xx", havingValue = "AB")
含义:
当配置文件中x.xx
的值为"AB"
时,Config
类中的 Bean 和配置会被加载到 Spring 容器中。如果该属性不存在,或者值不是"AB"
,则Config
不会被加载。
配置文件
你的配置文件中有以下内容:
x:
xx:AB
因为 xx
的值是 "AB"
,所以 Config
配置类会被加载。
参数说明
@ConditionalOnProperty
的常用参数有以下几个:
-
name
:
配置属性的名称,可以是单个,也可以是一个数组。@ConditionalOnProperty(name = "openapi.third.platform.platformKey", havingValue = "BOSHI-Hithium")
如果有多个
name
值,必须同时满足。 -
havingValue
(可选):
指定属性值必须匹配的值。如果不指定,则只检查属性是否存在。@ConditionalOnProperty(name = "my.property.name", havingValue = "true")
-
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.enable
为 true
时,MyFeatureConfig
才会被加载。
2. 属性缺失时加载
@ConditionalOnProperty(name = "my.feature.enable", matchIfMissing = true)
@Configuration
public class MyFeatureConfig {
// 配置代码
}
当 my.feature.enable
属性不存在时,MyFeatureConfig
仍然会被加载。
适用场景
- 环境切换: 根据环境变量加载不同的配置。
- 功能开关: 控制特定功能是否启用。
- 模块隔离: 根据配置动态加载某些模块。
你的代码中,@ConditionalOnProperty
的作用是确保 Config
仅在 Key
为 "AB"
的情况下加载,适用于多平台场景的动态配置切换。