Spring Boot中@ConditionalOnProperty的详解和用法

@ConditionalOnProperty 是Spring Boot 条件化配置的核心注解之一,能够让你根据配置属性的存在或特定值来决定是否注册一个 Bean 或配置类。

1.注解概述

@ConditionalOnProperty 是一个条件注解,它的作用是:只有当指定的配置属性满足特定条件时,被标注的组件才会被创建并加入到 Spring 容器中。

2.注解源码及属性

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {

    // --- 主要属性 ---
    
    // 配置属性的前缀(或名称)。与 `name`/`value` 共同构成完整的 key。
    String prefix() default "";

    // 配置属性的名称(同 `value`)。可以是单个字符串或字符串数组。
    // 完整的 key 为: `${prefix}.${name}`
    String[] name() default {};

    // 与 `name` 属性相同
    String[] value() default {};

    // 期望配置属性所具有的值。
    // 注意:只有当配置属性不为 `false` 时,才会进行值的匹配。
    String havingValue() default "";

    // 如果在配置中找不到指定的属性,是否应该匹配成功(即条件为真)。
    // `true`:如果属性不存在,则条件成立。
    // `false`:如果属性不存在,则条件不成立。
    boolean matchIfMissing() default false;
}

3.示例

1.检查属性是否存在,不关系值。(配置application.yml)

# application.yml
app:
  feature:
    cache-enabled: true
    new-algorithm: false
@Configuration
public class FeatureConfiguration {

    // 只有当 `app.feature.cache-enabled` 这个属性存在时,才会创建这个 Bean
    @Bean
    @ConditionalOnProperty(name = "app.feature.cache-enabled")
    public CacheService cacheService() {
        return new RedisCacheService();
    }

    // 只有当 `app.feature.new-algorithm` 存在时,才会创建这个 Bean
    // 注意:即使它的值是 `false`,只要属性存在,Bean 就会被创建!
    @Bean
    @ConditionalOnProperty("app.feature.new-algorithm") // 使用 value 简写
    public AlgorithmService oldAlgorithm() {
        return new OldAlgorithmService();
    }
}

2.检查属性的特定值(这里我用来决定是否加载对应的响应层)

# application.yml
app:
  feature:
    cache-enabled: A
    new-algorithm: B
@ConditionalOnProperty(name = "app.feature.cache-enabled", havingValue = "A")
@Controller
public class AController {

    // 对应的api
}
@ConditionalOnProperty(name = "app.feature.new-algorithm", havingValue = "B")
@Controller
public class BController {

    // 对应的api
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值