Spring Boot @EnableScheduling conditionally

前端 未结 4 1744
慢半拍i
慢半拍i 2021-02-20 03:53

Is there a way to make @EnableScheduling conditional based on an application property? also is it possible to disable controllers based on properties too?

What I\'m tryi

4条回答
  •  北海茫月
    2021-02-20 04:24

    I Solved this, here is what I did for future reference:

    • Removed @EnableScheduling annotation from my app
    • Added a new configuration class and conditional to enable/disable scheduling based on an application property

    -

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

    And the conditional class

    public class SchedulerCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            return Boolean.valueOf(context.getEnvironment().getProperty("com.myapp.config.scheduler.enabled"));
        }
    
    }
    

    Also, to disable web server on the backend server, just add the following to the application.properties file:

    spring.main.web_environment=false
    

提交回复
热议问题