春季预定任务停止工作较长时间

时间:2018-04-10 11:31:20

标签: java spring spring-scheduled

我们有10个计划任务配置为每20秒使用以下注释运行(它们在晚上停止,因为依赖系统在早上4点重启):

@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod1() {
    ...
}
@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod2() {
    ...
}
...

我们有一个配置了池大小为10的线程池taks调度程序:

@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);
    }
}

有时在白天,其中一项任务不会执行一两个小时,然后会继续定期执行。 任务是否可能阻止其他任务?我怎样才能知道是否是这种情况?

1 个答案:

答案 0 :(得分:0)

Suppost pollingMethod1需要20秒以上,然后它可能会被不同的线程同时执行,这会导致其他任务被阻止。如果允许,您应该增加POOL_SIZE