背景
系統(tǒng)存在定時(shí)任務(wù)的執(zhí)行猖辫。如:第三方系統(tǒng)數(shù)據(jù)獲取毅人、系統(tǒng)初始化、數(shù)據(jù)轉(zhuǎn)儲(chǔ)等煞赢。任務(wù)管理至少具備下面能力:
- 靈活的執(zhí)行策略(周期慎璧、定時(shí)等)
- 頁(yè)面配置執(zhí)行策略
- 手動(dòng)頁(yè)面觸發(fā)
- 能夠查看任務(wù)執(zhí)行的詳細(xì)信息
設(shè)計(jì)
配置文件加載原子任務(wù)床嫌,數(shù)據(jù)庫(kù)存儲(chǔ)任務(wù)執(zhí)行的狀態(tài)信息。由Quartz實(shí)現(xiàn)任務(wù)的執(zhí)行策略胸私,可同步或異步并發(fā)執(zhí)行任務(wù)
- 配置文件
名稱 | 描述 | 備注 |
---|---|---|
taskName | 任務(wù)名稱 | - |
exeClass | 執(zhí)行實(shí)體類 | 實(shí)現(xiàn)任務(wù)的包名類名 |
nextTask | 后置任務(wù) | 鏈?zhǔn)綀?zhí)行時(shí)厌处,下個(gè)任務(wù)的名稱 |
preTask | 前置任務(wù) | 樹狀任務(wù),父親任務(wù)名稱 |
- DB
名稱 | 描述 | 備注 |
---|---|---|
taskName | 任務(wù)名稱 | - |
status | 執(zhí)行狀態(tài) | - |
strategy | 執(zhí)行策略 | - |
exeTime | 最后一次執(zhí)行時(shí)間 | - |
exeResult | 最后一次執(zhí)行結(jié)果 | - |
-
關(guān)鍵類設(shè)計(jì)
1.SysJob.java
由quartz拉起的job方法定義
2.AtomTask.java(implements Runnable)(abstract)
private String taskName;
private String exeClass;
private String nextTask;
private String preTask;
private String description;
private StatusEnum taskStatus;
private String strategy;
//可新起線程異步執(zhí)行
public void run()
{
execute()
}
//同步任務(wù)執(zhí)行時(shí)岁疼,調(diào)用該方法
public abstract boolean execute();
//鉤子方法阔涉,可用來(lái)做通用記錄日志。若具體任務(wù)有特殊需求捷绒,可覆蓋實(shí)現(xiàn)該類
public void recordLog()
{}
3.TaskMgt
單例實(shí)現(xiàn)
private Map<String, AtomTask> taskMap;
private Map<String, List<AtomTask>> treeTask;
public boolean exeTaskByName(taskName, isSyn=true); //單個(gè)任務(wù)執(zhí)行
public boolean exeTaskChain(startTaskName, isSyn=true); //鏈?zhǔn)饺蝿?wù)執(zhí)行
public boolean exeTaskTree(rootTaskName, isSyn=true); //樹狀任務(wù)執(zhí)行
-
任務(wù)分類
1.數(shù)據(jù)同步
2.數(shù)據(jù)匯聚(按天打點(diǎn)瑰排、臨時(shí)數(shù)據(jù)產(chǎn)生等)