使用@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);
}
}
这样配置就不会阻塞,可以异步执行啦