package com.xhkjedu.sstudy.config;

import org.springframework.context.annotation.*;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;

/**
 * @author ywx
 * @className ScheduledConfig
 * @description @Scheduled 注解，是被一个叫做 ScheduledAnnotationBeanPostProcessor 的类所拦截的，
 * 所以我们可以根据配置，决定是否创建这个 bean，如果没有这个 bean，@Scheduled 就不会被拦截，那么定时任务肯定不会执行了，
 * 需要注意的是：这种方式，启动类上面的 @EnableScheduling 需要去掉。
 * @date 2021/5/18 9:15
 **/
@Configuration
public class ScheduledConfig {
    @Conditional(ScheduledCondition.class)
    @Bean
    public ScheduledAnnotationBeanPostProcessor processor(){
        return new ScheduledAnnotationBeanPostProcessor();
    }
}

class ScheduledCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return Boolean.valueOf(context.getEnvironment().getProperty("enable.scheduled"));
    }
}
