(六)springboot入門之定時任務動態管理

原文地址:http://te-amo.site/user/article/info/ARTICLE20180227033124070

寫在前面的

在實際開發中定時任務的執行計劃都不是固定的,根據不同的實際情況會指定不同的任務開啓時間,停止時間,以及執行頻率,所以動態的管理定時任務是一種實際開發中常見的設計。

一、動態管理定時任務說明

使用Quartz來實現定時任務的管理是比較簡單的,但是本次我們將使用Spring提供ThreadPoolTaskScheduler來實現,由於現在還未對Quartz深入學習,所以對Quartz不做過多解釋。
ThreadPoolTaskScheduler是TaskScheduler接口的默認實現類,能夠開啓線程池進行任務調度,支持設置線程數,默認爲單線程。
ThreadPoolTaskScheduler 通過schedule方法,添加定時任務和觸發器後,會得到一個ScheduledFuture

二、使用ThreadPoolTaskScheduler實現定時任務管理

示例代碼如下:

@Component
public class DynamicTask {
    private static Logger logger = Logger.getLogger(DynamicTask.class.getName());
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
    private ScheduledFuture<?> task;

    //採用注入的方式創建ThreadPoolTaskScheduler 
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }

    //任務開始
    public void startTask() {
        task = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                logger.info(new Date()+"0/2 * * * * *");
            }
        }, new CronTrigger("0/2 * * * * *"));
        logger.info("開始任務!");
    }
    //任務停止
    public String stopTask() {

        if (task != null) {

            task.cancel(true);

        }

        logger.info("任務停止!");

        return "stopCron";

    }
    //更改計劃,可以將更改的執行計劃作爲參數傳入
    public void changePlan() {
        stopTask();
        task = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                logger.info(new Date()+"*/5 * * * * *");
            }
        }, new CronTrigger("*/5 * * * * *"));
        logger.info("改變任務!");
    }
}

以上代碼只是一個簡單的示例,更多的應用,大家根據實際情況來設計

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 4673
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章