其實schedulingconfigurer實現方法很簡單,只需要實現schedulingconfigurer並重寫configuretasks方法,在啟動類必須加上@enablescheduling註解即可。
@configuration
@enablescheduling
@slf4j
public class ruletask implements schedulingconfigurer
/*** 重新整理任務
* cronlist是資料庫查出來的定時任務列表
* @param rulelist
*/public void refresh(listcronlist)
}if (cronlist != null)
//如果執行時間發生了變化,則取消當前的定時任務
if (scheduledfutures.containskey(warcron.getcronid()))
crontask task = new crontask(
new runnable()
}, warcron.getcron()
);scheduledfuture<?> future = registrar.getscheduler().schedule(task.getrunnable(), task.gettrigger());
crontasks.put(warcron.getcronid(), task);
scheduledfutures.put(warcron.getcronid(), future);}}
}/**
* 判斷是否有該任務
** @param warcronlist
* @param cronid
* @return
*/private boolean exists(listwarcronlist, long cronid)
}return false;
}}
每次新增編輯刪除資料庫中的任務時都需重新整理下任務 以達到任務的動態變化
啟動boot時也需執行refresh方法;
/**
* @author: pandar
* @date: 2021/3/12 0012 上午 11:57
* @description: 專案啟動後重新整理定時任務
*/@component
@autowired
private ruletask ruletask;
@autowired
private warcronservice warcronservice;
@override
listwarcronlist = warcronservice.selectwarcronall();
ruletask.refresh(rulelist);
}}
資料庫表結構
cron_id
cron
delay
10/2 * * * * ?02
0/7 * * * * ?
5
springboot動態定時任務
前提概述 springboot定時器開發特別簡單,本篇文章不做介紹 通過配置 enablescheduling和 scheduled cron 實現 動態定時器相對複雜,大概有兩種實現方式 1.讀取資料庫的cron引數,2.讀取配置檔案cron引數。我這邊採用讀取配置檔案的方式簡單的介紹一下如何使用...
springboot動態定時任務
spring boot通過註解 enablescheduling和 scheduled實現的是靜態定時任務,不能動態新增 停止 修改等.本文通過threadpooltaskscheduler實現定時任務動態增刪改.建立threadpooltaskscheduler bean public threa...
SpringBoot 動態定時任務
最近在工作中遇到了springboot 動態執行定時任務的場景,通過資料庫動態指定任務的執行頻率,禁用或啟動定時任務等,通過尋找資料,成功解決了這一場景,一起分享一下吧 1 資料庫設計 create table spring scheduled cron cron id int 11 notnull...