Spring 调度程序不执行阻塞任务

Spring Scheduler doesn't execute for blocking tasks

我是 运行 spring 引导中的以下调度程序。 crontab 时间设置为每分钟执行该方法。然后我尝试阻止该方法 1.5 分钟。我观察到,该方法不会在第一次执行的下一分钟执行,直到循环执行 1.5 分钟。 我认为它以异步方式工作。现在很迷茫! spring 调度程序是阻塞调用吗?

@Override
    @Scheduled(cron = "0 0/1 * * * ?")
    //@SchedulerLock(name = "test")
    public void test()
    {
        System.out.println("test scheduler enters:"+ LocalDateTime.now());
        //LockAssert.assertLocked();
        //System.out.println("now locked\n");
        long st=System.currentTimeMillis();

        while(true)
        {
            long diff=(System.currentTimeMillis()-st)/1000;
            if(diff>90)
            {
                System.out.println("breaking time:"+(System.currentTimeMillis()-st)/1000+", timeNow:"+ LocalDateTime.now());
                break;
            }
        }
        System.out.println("Out of the loop");
    }

spring scheduler docs 中所述,taskScheduler 默认使用单线程运行。

您可以配置多个线程,例如(取自here):

 @Configuration
 @EnableScheduling
 public class AppConfig implements SchedulingConfigurer {

     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
         taskRegistrar.setScheduler(taskExecutor());
     }

     @Bean(destroyMethod="shutdown")
     public Executor taskExecutor() {
         return Executors.newScheduledThreadPool(100);
     }
 }