如何取消特定的计划任务?

时间:2017-03-04 17:18:47

标签: java spring groovy scheduled-tasks

如果我多次运行' / schedule'在我的控制器中,在我的服务器中使用不同的cronExpression运行一些任务计数。如何取消已运行的特定任务?例如,如果我使用不同的cron表达式任务安排3次,如何取消第一个或第二个ScheduledTask?我是否必须取消这个ScheduledTask?我是否需要将它存储在一些带有字典id + ScheduledTask的静态列表中?怎么可能提供?感谢。

我的代码片段在这里。

MyController.groovy

class MyController{

  private final NotificationScheduler notificationScheduler

  @Autowired
  MyController(NotificationScheduler notificationScheduler) {
    this.notificationScheduler = notificationScheduler
  }

  @RequestMapping(method = GET, value = '/schedule')
  public void Schedule(String cronExpression){

    notificationScheduler.schedule(cronExpression);
  }
  @RequestMapping(method = GET, value = '/cancel')
  public void Cancel(){
    notificationScheduler.cancel()
  }
}

NotificationScheduler.groovy

@Service
public class NotificationScheduler {

  private final TaskScheduler scheduler;

  @Autowired
  NotificationScheduler(TaskScheduler scheduler)
  {
    this.scheduler = scheduler
  }

  public void schedule(String cronExpression) throws ParseException {
    utilityNotifierScheduledFuture = scheduler.schedule(new Notifier(), new CronTrigger(cronExpression));
  }
  public void cancel(){
    utilityNotifierScheduledFuture.cancel(false)
  }
}

Notifier.groovy

class Notifier implements Runnable{

  @Override
  void run() {
    System.out.println("UtilityNotifier is being run by " + thread.getName() + " (" + thread.getId() + ")");
    System.out.println("Send notification");
  }
}

0 个答案:

没有答案