Spring: отменить аннотированную задачу @Scheduled

Я запускаю приложение Spring Boot и пытаюсь запустить два задания с определенной задержкой, используя аннотацию @Scheduled.

Я хотел бы отменить эти задания программно при определенном условии. Каков рекомендуемый способ сделать это? Ниже приведена конфигурация моего приложения:

Main.java

@SpringBootApplication
@EnableScheduling
public class Main implements CommandLineRunner {

  static LocalDateTime startTime = LocalDateTime.now();

  public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Main.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.run(args);
  }

  @Override
  public void run(String... args) throws Exception {
  }

}

Задание1.java

@Component
public class Job1 {

  @Scheduled(fixedDelay = 10000)
  public void run() {
    System.out.println("Job 1 running");
  }

}

Задание 2.java

@Component
public class Job1 {

  @Scheduled(fixedDelay = 10000)
  public void run() {
    System.out.println("Job 2 running");
  }

}

person 31piy    schedule 27.07.2017    source источник


Ответы (2)


Вам необходимо запланировать свои задачи с помощью одной из реализаций интерфейса Spring TaskScheduler, например TimerManagerTaskScheduler или ThreadPoolTaskScheduler, получая ScheduledFuture.

public interface TaskScheduler {

    ScheduledFuture schedule(Runnable task, Trigger trigger);

    ScheduledFuture schedule(Runnable task, Date startTime);

    ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period);

    ScheduledFuture scheduleAtFixedRate(Runnable task, long period);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay);

}

ScheduledFuture объект предоставляет метод для отмены задачи (ScheduledFuture.cancel())

person fg78nc    schedule 27.07.2017

Метод расписания имеет запланированное будущее. получите дескриптор этого будущего в своем методе, а затем вы можете вызвать для него отмену, чтобы отменить задание, на которое вы можете ссылаться Запланированная задача остановки Spring-Boot запущена с использованием аннотации @Scheduled и остановить запланированное выполнение Spring, если оно зависает через определенное время

person Rohit    schedule 27.07.2017