Планировщик весенней загрузки Dynami c, отмена запланированного будущего - PullRequest
0 голосов
/ 16 марта 2020

Во-первых, моя ситуация: у меня есть список задач, хранящихся в БД, которые нужно запускать с помощью cron (например, задача 1 в 8:00, задача 2 в 10:00 каждый день и т. Д. c). Мне нужно выполнять операции CRUD поверх эти задачи.

Я следовал этой статье http://mbcoder.com/dynamic-task-scheduling-with-spring/.

Так что моя идея состоит в том, что при запуске я загружу все задачи в TaskScheduler и сохраню их в некоторой переменной в моем приложении вот так:

private List<ScheduledFuture> futures = new ArrayList<>();

public void addAll() {
    List<Task> taskList = taskRepository.findAll();
    for (Task task : taskList) {
        // TaskRunnable is class which implements Runnable interface and extends Task class 
        TaskRunnable tr = new TaskRunnable(task, taskUnitRepository.findAllByTaskId(task.getId()));
        futures.add(taskScheduler.schedule(tr, new CronTrigger(tr.getCron())));
    }
}

до сих пор все работает нормально

проблема в том, что я не знаю, как отменить выполнение задачи

я пытался что-то вроде этого, но это не работает:

public void deleteOne(Long taskId) throws ExecutionException, InterruptedException {
    for (ScheduledFuture sf : futures) {
        // sf.get() is not returning TaskRunnable
        TaskRunnable taskRunnable = (TaskRunnable) sf.get();
        if (taskRunnable.getId().equals(id)) {
            sf.cancel(true);
        }
    }
}

Я не могу получить объект, который должен быть выполнен из экземпляра ScheduledFuture. Поэтому я не могу отменить задачу по параметру taskId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...