SpringBoot 定時任務の @Scheduled 並行 配置

前兩天用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!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章