Планируйте несколько задач весной - PullRequest
0 голосов
/ 04 июня 2018

У меня есть 2 задачи, которые реализуют (мой) PeriodicTask, который реализует Runnable.Есть код, который отлично работает.Но я ожидаю много задач в будущем и хочу избежать регистрации каждой из них в TaskScheduler.Возможно ли TaskScheduler найти все классы (которые реализуют PeriodicTask) и запланировать их.Есть также проблема, как установить параметры расписания (пусть они будут статическими окончательными для начала).

@Component
public class TaskScheduler {

    private final Task1 task1;
    private final Task2 test2;

    public TaskScheduler(Task1 task1, Task2 test2) {
        this.task1 = task1;
        this.test2 = test2;
    }
    @Scheduled(fixedDelay = 60 * 1000, initialDelay = 1000)
    public void scheduleTask1() {task1.run();}

    @Scheduled(fixedDelay = 3600 * 1000, initialDelay = 5 * 1000)
    public void scheduleTask2() {test2.run();}
}

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете реализовать его без @Scheduled аннотации:

@Component
public class TaskSchedulerComponent {

    @Autowired
    private ThreadPoolTaskScheduler taskScheduler;


    public void schedulePeriodicTask(Runnable task, long delay, long period){

        PeriodicTrigger periodicTrigger
                = new PeriodicTrigger(period, TimeUnit.MICROSECONDS);
        periodicTrigger.setFixedRate(true);
        periodicTrigger.setInitialDelay(delay);

        taskScheduler.schedule(task,periodicTrigger);
    }
}

Затем в вашем методе main вы регистрируете все задачи, которые должны выполняться периодически, с заданной задержкой и периодом времени.

Примечание. Чтобы @Scheduled использовал параметры, вы можете использовать значения из файла свойств, например:

@Scheduled(fixedDelayString = "${fixed.delay}",initialDelay = ${init.delay})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...