Spring中的定時任務@scheduled
阿新 • • 發佈:2018-12-11
使用@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); } }
這樣配置就不會阻塞,可以非同步執行啦