美文网首页
如何通过配置控制@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