1. 程式人生 > >Spring中的定時任務@scheduled

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

}

這樣配置就不會阻塞,可以非同步執行啦