Spring中的定时任务@scheduled

使用@scheduled实现定时任务 A 任务会阻塞

@Component
@EnableScheduling
public class ATask implements SchedulingConfigurer {
       @Scheduled(cron="0/10 * * * * ? ")   //每10秒执行一次
       public void aTask(){    
            try {
                TimeUnit.SECONDS.sleep(20); //阻塞20秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

           System.out.println(LocalDateTime.now()+"*********A任务每10秒执行一次进入测试");
       }

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

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

B不会阻塞 

@Component
@EnableScheduling

public class BTask implements SchedulingConfigurer {

    @Scheduled(cron = "0/5 * * * * ? ")   //每5秒执行一次
    public void bTask() {
        System.out.println(LocalDateTime.now() + "*********B任务每5秒执行一次进入测试");
    }

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

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

}

这样配置就不会阻塞,可以异步执行啦 

猜你喜欢

转载自blog.csdn.net/love_caicai/article/details/82804341