У нас есть 10 запланированных задач, настроенных на запуск каждые 20 секунд со следующей аннотацией (они останавливаются ночью, потому что зависимые системы перезагружаются в 4 утра):
@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod1() {
...
}
@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod2() {
...
}
...
У нас есть планировщик задач пула потоков, настроенный с размером пула 10:
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
threadPoolTaskScheduler.setThreadNamePrefix("polling-pool-");
threadPoolTaskScheduler.initialize();
threadPoolTaskScheduler.setAwaitTerminationSeconds(120);
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
Иногда в течение дня одна из задач не выполняется в течение одного-двух часов, а затем продолжает выполняться регулярно. Возможно ли, что одна задача блокирует другие задачи? И как мне узнать, так ли это?