@ConditionalOnExpression条件加载Bean

@ConditionalOnExpression 是 Spring Framework 中用于条件性加载 Bean 的注解,它允许你基于一个 Spring Expression Language (SpEL) 表达式的结果来决定是否加载某个 Bean。在你的例子中,注解中的表达式依据一个配置属性来决定是否启用相关功能。

注解详解

@ConditionalOnExpression("'${cache.clean.enabled:false}'.equals('true')")

这个注解中的表达式主要做了以下几件事:

  1. ${cache.clean.enabled:false}:这是一个 Spring 配置属性占位符。

    1.1 ${cache.clean.enabled} 表示从配置文件(如 application.properties 或 application.yml)中获取 cache.clean.enabled 的值。
    1.2 如果没有找到 cache.clean.enabled 属性,则使用默认值 false。

  2. 'true'.equals(...):这是一个字符串比较操作,它检查属性值是否为 'true'
    2.1 如果配置属性的值为 'true',表达式结果为 true,则注解标注的 Bean 会被加载。
    2.2 如果配置属性的值不是 ‘true’,则表达式结果为 false,该 Bean 将不会被加载。

示例说明:

假设你在 application.properties 中有以下配置:

cache.clean.enabled=true
相关代码
package cn.keking.config;

import cn.keking.service.cache.CacheService;
import cn.keking.utils.KkFileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @auther: chenjh
 * @since: 2019/6/11 7:45
 */
@Component
@ConditionalOnExpression("'${cache.clean.enabled:false}'.equals('true')")
public class SchedulerCleanConfig {

    private final Logger logger = LoggerFactory.getLogger(SchedulerCleanConfig.class);

    private final CacheService cacheService;

    public SchedulerCleanConfig(CacheService cacheService) {
        this.cacheService = cacheService;
    }

    private final String fileDir = ConfigConstants.getFileDir();

    //默认每晚3点执行一次
    @Scheduled(cron = "${cache.clean.cron:0 0 3 * * ?}")
    public void clean() {
        logger.info("Cache clean start");
        cacheService.cleanCache();
        KkFileUtils.deleteDirectory(fileDir);
        logger.info("Cache clean end");
    }
}

那么,@ConditionalOnExpression 中的表达式将解析为 'true'.equals('true'),因此,相关的 Bean 会被加载。

如果没有配置这个属性,默认值是 false,则表达式解析为 'false'.equals('true'),相关的 Bean 不会被加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值