有没有办法根据应用程序属性使@EnableScheduling 成为条件?也可以根据属性禁用 Controller 吗?
我想要实现的是让相同的 spring boot 应用程序用于处理 Web 请求(但不在同一台机器上运行计划任务),并在后端服务器上安装相同的应用程序以仅运行计划任务。
我的应用看起来像这样
@SpringBootApplication
@EnableScheduling
@EnableTransactionManagement
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
一个示例计划作业如下所示
@Component
public class MyTask {
@Scheduled(fixedRate = 60000)
public void doSomeBackendJob() {
/* job implementation here */
}
}
最佳答案
我解决了这个问题,以下是我所做的以供将来引用:
- 从我的应用程序中删除了@EnableScheduling 注释
- 添加了一个新的配置类和条件以根据应用程序属性启用/禁用调度
-
@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();
}
}
和条件类
public class SchedulerCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Boolean.valueOf(context.getEnvironment().getProperty("com.myapp.config.scheduler.enabled"));
}
}
此外,要在后端服务器上禁用 Web 服务器,只需将以下内容添加到 application.properties 文件中:
spring.main.web_environment=false
关于java - Spring Boot @EnableScheduling 有条件地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182633/