Запланированная задача Spring перестает работать в течение более длительного периода времени

У нас есть 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);
    }
}

Иногда в течение дня одна из задач не выполняется в течение одного-двух часов, а затем продолжает выполняться регулярно. Возможно ли, что одна задача блокирует другие задачи? И как мне узнать, так ли это?


person Jip Spinnewijn    schedule 10.04.2018    source источник


Ответы (1)


Предложение pollingMethod1 занимает более 20 секунд, затем оно может выполняться разными потоками одновременно, что приводит к блокировке другой задачи. Если это разрешено, следует увеличить POOL_SIZE.

person xingbin    schedule 10.04.2018