Исходя из набора конфигураций, моя задача - создавать список запланированных задач, которые будут выполняться на основе CronTrigger, каждые x минут.Черновая версия реализации похожа на эту:
for(Config cfg:configs){
Runnable task=()->doSomething(cfg);
taskScheduler.schedule(task,new CronTrigger("0 0/"+cfg.getScheduledTimeInMinutes()+" * * * *"));
}
taskScheduler
- это bean-компонент, автоматически подключенный в текущем классе и определенный в классе конфигурации как:
@Bean
public TaskScheduler taskScheduler() {
return new ConcurrentTaskScheduler();
}
Все идет нормально.Все конфиги приводят к выполнению одного и того же метода с разными аргументами в назначенное время.Проблема в том, что для выполнения метода doSomething()
требуется больше времени, а следующая запланированная задача должна быть запущена, или если одновременно запланировано более одной задачи.В этом случае происходит то, что выполнение не асинхронно, и каждая задача ожидает завершения предыдущей задачи.Возможно ли добиться одновременного выполнения этих запланированных задач?Я использую Java 8 и Spring Boot 2.0.