美文网首页
如何通过配置控制@EnableScheduling呢?

如何通过配置控制@EnableScheduling呢?

作者: guessguess | 来源:发表于2020-11-09 18:53 被阅读0次

    为什么我们只要添加注解就可以使用spring调度相关的组件呢?
    先来看看这个注解的内部

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Import(SchedulingConfiguration.class)
    @Documented
    public @interface EnableScheduling {
    
    }
    

    其实归根到底起作用的还是SchedulingConfiguration这个类,看到里面,其实最主要的功能就是注入了一个内部的后置处理器ScheduledAnnotationBeanPostProcessor。用于处理@Scheduled注解。原理暂时不知道,后面再看看。

    @Configuration
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public class SchedulingConfiguration {
    
        @Bean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
        @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
        public ScheduledAnnotationBeanPostProcessor scheduledAnnotationProcessor() {
            return new ScheduledAnnotationBeanPostProcessor();
        }
    
    }
    
    

    那么生产环境下,定时器必然需要开启,测试环境下呢?不一定
    于是乎,怎么控制?
    代码如下

    @Configuration
    @ConditionalOnExpression(value = "${enable.scheduling}")
    @Import(SchedulingConfiguration.class)
    public class ControlSchedulingConfiguration {
    
    }
    

    我们只需要在配置文件中,通过配置自定义的环境变量来控制SchedulingConfiguration类的导入,就可以完成对定时任务的控制了。
    若value不存在,默认是为true的,所以我们只需要在测试环境中配enable.scheduling=false即可将定时任务关闭。

    相关文章

      网友评论

          本文标题:如何通过配置控制@EnableScheduling呢?

          本文链接:https://www.haomeiwen.com/subject/sgkrbktx.html