背景
系统存在定时任务的执行。如:第三方系统数据获取、系统初始化、数据转储等。任务管理至少具备下面能力:
- 灵活的执行策略(周期、定时等)
- 页面配置执行策略
- 手动页面触发
- 能够查看任务执行的详细信息
设计
配置文件加载原子任务,数据库存储任务执行的状态信息。由Quartz实现任务的执行策略,可同步或异步并发执行任务
- 配置文件
名称 | 描述 | 备注 |
---|---|---|
taskName | 任务名称 | - |
exeClass | 执行实体类 | 实现任务的包名类名 |
nextTask | 后置任务 | 链式执行时,下个任务的名称 |
preTask | 前置任务 | 树状任务,父亲任务名称 |
- DB
名称 | 描述 | 备注 |
---|---|---|
taskName | 任务名称 | - |
status | 执行状态 | - |
strategy | 执行策略 | - |
exeTime | 最后一次执行时间 | - |
exeResult | 最后一次执行结果 | - |
-
关键类设计
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;
//可新起线程异步执行
public void run()
{
execute()
}
//同步任务执行时,调用该方法
public abstract boolean execute();
//钩子方法,可用来做通用记录日志。若具体任务有特殊需求,可覆盖实现该类
public void recordLog()
{}
3.TaskMgt
单例实现
private Map<String, AtomTask> taskMap;
private Map<String, List<AtomTask>> treeTask;
public boolean exeTaskByName(taskName, isSyn=true); //单个任务执行
public boolean exeTaskChain(startTaskName, isSyn=true); //链式任务执行
public boolean exeTaskTree(rootTaskName, isSyn=true); //树状任务执行
-
任务分类
1.数据同步
2.数据汇聚(按天打点、临时数据产生等)