前兩天用springboot 寫了個定時任務,想要讓系統定時去做某些事情 ,並且希望是並行。
然後用到了 @Scheduled 這個註解
代碼如下
@Component
@EnableScheduling
public class AsyncTaskHandlerTask {
private static final Logger logger = LogManager.getLogger(AsyncTaskHandlerTask.class);
@Scheduled(cron = "0 0/1 * * * ?")
public void task1() {
logger.info("tast1___________________");
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
logger.info("tast1-------------------");
}
@Scheduled(cron = "0 0/1 * * * ?")
public void task2() {
logger.info("tast2++++++++++++++++++++");
}
}
運行結果
2018-03-29 17:38:00.001 INFO 6160 --- [pool-1-thread-2] AsyncTaskHandlerTask : tast1___________________
2018-03-29 17:38:00.002 INFO 6160 --- [pool-1-thread-2] AsyncTaskHandlerTask : tast1-------------------
2018-03-29 17:38:01.001 NFO 6160 --- [pool-1-thread-1] AsyncTaskHandlerTask : tast2++++++++++++++++++++
看到運行結果不對啊,這不是串行嗎?然後找了很多資料,哦 原來這種方式默認是串行的 要想並行 還需要一個配置 如下
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
}
}
再看運行結果
2018-03-29 20:45:00.002 INFO 6160 — [pool-1-thread-9] AsyncTaskHandlerTask : tast1___________________
2018-03-29 20:45:00.003 INFO 6160 — [pool-1-thread-5] AsyncTaskHandlerTask : tast2++++++++++++++++++++
2018-03-29 20:45:01.002 INFO 6160 — [pool-1-thread-9] AsyncTaskHandlerTask : tast1——————-“`
Perfect!!!!