Как условно запустить запланированное задание в SpringBoot - PullRequest
0 голосов
/ 03 апреля 2019

У меня запланированное задание, которое выполняется через определенное время.

Теперь я хочу запустить это запланированное задание, только если условие выполнено.Условие получается во время выполнения и не зависит от какого-либо параметра конфигурации.

Как мне этого добиться.Я знаю, что 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 голосов
/ 03 апреля 2019

Вы можете перенести запланированное задание в другой класс:

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;
    }
}

это должно работать правильно.

...