最近遇到壹個需求,定時任務的業務邏輯不會改變,但需要動態添加、移除定時任務,而且定時執行時間有可能隨時改變,這可怎麽實現呢?
首先,配置定時任務線程池;
第二步,建立任務,裏面包含了定時任務需要實現的業務邏輯;
第三步,應用定時任務,包括添加、移除;
最後,運行入口程序,打開瀏覽器進行測試; 通過瀏覽器分別執行了localhost:8080/index/insert/1000/10、localhost:8080/index/insert/2000/20,也就是添加了兩個任務,任務1000每10s執行壹次,任務2000每20s執行壹次;
執行 http://localhost:8080/index/remove/1000 ,把1000的任務移除掉,再看執行結果,只剩下任務2000,ok,動態添加、移除定時任務編碼完成。
當然,這裏為了測試,把管理任務的隊列直接放到了Controller裏,實際應用時應保持全局唯壹。
最後總結
通過這個需求,我們又用到了壹個類ThreadPoolTaskScheduler,它有別於ThreadPoolTaskExecutor類,有興趣有時間的可以查看源碼。
動態添加、移除定時任務的操作流程,大致可以分為以下四個步驟:
1.建立壹個定時任務線程池;
2.為定時任務線程池建立壹個隊列,來管理這些任務;
3.根據唯壹標識,往定時任務線程池和隊列裏分別添加這個任務;
4.根據唯壹標識,從定時任務線程池裏取消壹個任務,並從隊列裏移除這個任務。