如何在SpringBoot中有条件地运行计划作业

时间:2019-04-03 10:03:28

标签: spring-boot conditional scheduled-tasks

我安排的工作在一定时间后会不断运行。

现在,我只想在满足条件的情况下运行此计划的作业。该条件是在运行时获取的,它不依赖于任何配置参数。

我如何实现这一目标。我知道Spring Boot 4.x提供了称为Condition的接口。但是以某种方式我的代码不起作用。

这是我的代码...

ScheduledTask

@Configuration
public class ScheduleTask {
  @Scheduled(fixedRateString = "5000")
  @Conditional(SchedulerCondition.class)
  public void pollDepots() {
      System.out.println("Running");
  }
}

条件类

public class SchedulerCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;   
//Here some condition needs to be implemented which is not dependent on the parameters of this method.
    }
}

等待您的回复。 祝你有美好的一天。

1 个答案:

答案 0 :(得分:0)

您可以将计划的任务拉到另一个班级:

public class ScheduledPollDepots {

    @Scheduled(fixedRateString = "1000")
    public void pollDepots() {
        System.out.println("Running");
    }
}

然后根据条件创建一个bean:

@Configuration
public class Config {

    @Bean
    @Conditional(SchedulerCondition.class)
    public ScheduledPollDepots pollDepots() {
        return new ScheduledPollDepots();
    }

}

您的计划条件保持不变

public class SchedulerCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

它应该正常工作。