任务流程图
用户通过该框架只需在配置文件中配置好继承了DTJobBase类的路径和定时任务表达式,即可开启定时任务,属于非常轻量级的定时任务框架。具体流程图如下:
定时类设计
定时任务抽象类,该类对外提供了一个jobRun()抽象方法,使用时只需继承该类,然后实现该抽象方法即可。
/**
* 任务抽象类/已下仅含有核心代码
* @author 康驻关
* Fri Jul 19 09:00:00 CST 2019
*/
public abstract class DTJobBase extends Thread {
private Object _result = null;//用于存放任务执行返回结果
private Thread _t = null;//用于执行当前线程
private Exception _e = null;//用于存放捕获异常
private long _timeStart = 0;//任务开始时间
private long _timeCost = 0;//任务消耗时间
/**
* 自定义任务接口
* @return
* @throws Exception
*/
public abstract Object jobRun() throws Exception;
/**
* 执行任务并记录任务花费时间
*/
@Override
public void run() {
this._timeStart = System.currentTimeMillis();
try {
_result = jobRun();
} catch (Exception ex) {
this._e = ex;
}
this._timeCost = System.currentTimeMillis() - this._timeStart;
}
}
定时任务工具类设计
定时任务工具类设计,主要是
initProperties(); // 初始化配置
initJobs(); //初始化Job任务
initWatcher(); //扫描并执行定时任务
这三个方法。在checkJobs()方法里我有一段代码,不知道是否可以优化程序,有大神看到后跟我留言,谢谢了!
/**
* 开始定时任务工具类/已下仅含有核心代码
* @author 康驻关
* Fri Jul 19 09:00:00 CST 2019
*/
public class CTUtil {
private static HashMap<String, String> _CTProperties = null; // 配置文件列表,key为类名,value为克隆表达式
private static HashMap<String, CTJobBase> _CTJobs = null; // 定时任务列表,key为任务token,value为定时任务
private static Boolean _Suspended = false; // 任务暂停
private static Watcher _Watcher = null;
/**
* 任务检测类
*/
protected static class Watcher implements Runnable {
private boolean _Cancelled