gpt4 book ai didi

java - Spring Boot @EnableScheduling 有条件地

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:04 24 4
gpt4 key购买 nike

有没有办法根据应用程序属性使@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com