当前位置: 首页 > 图灵资讯 > 技术篇> 如何通过配置控制@EnableScheduling呢?

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

来源:图灵教育
时间:2023-06-28 14:31:43

为什么我们只要添加注解就可以使用spring调度相关的组件呢?先来看看这个注解的内部@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Import(SchedulingConfiguration.class)@Documentedpublic @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即可将定时任务关闭。