什么是“时钟定时任务”?

“知启蒙时钟定时任务”是线程式时钟定时任务,有两种任务机制, 第一种是每隔指定时间执行(Timer),另一种是指定时间点执行,时间粒度为秒,每秒由时刻安排线程管理器(Scheduler)检查并通知。

知启蒙时钟有三大特点
1、执行保护机制,即任务执行时间超过指定时长时,此时产生的第二个任务向后顺延,排除无效的并发错乱。
2、首次追赶执行机制,即系统启动时任务执行时间已过,是否追赶执行,由配置设定。
3、随系统时钟切换机制,即任务执行跟随系统时钟,如当前系统时间12:05,指定每小时0分0秒执行,只需修改系统到12:59:50秒,等10秒即会执行。解决测试等待的烦扰。
知启蒙时钟任务接口定义(编写一个任务实现Task接口,或继承自Tasker)
方法 说明
public void load(); 任务创建时加载参数的方法,如果没有需要加载的参数可以继承Tasker
public int execute(); 任务每次执行的方法,返回值0表示正常执行完成,非0表示设置等待指定的时间再执行。
public class MinuteTask implements Task { private static final Log log = LogFactory.getLog(MinuteTimer.class); @Override public void load() { } @Override public int execute() { log.info("每分钟任务"); return 0; } }
public class MinuteTask extends Tasker { private static final Log log = LogFactory.getLog(MinuteTimer.class); @Override public int execute() { log.info("每分钟任务"); return 0; } }
知启蒙时钟管理器配置(时钟管理器是一种多例服务,配置在服务组中即会监听“schedule”的任务配置)
<group id="service" desc="系统服务配置,有依赖时注意顺序,系统按顺序加载,按倒序销毁"> <item key="schedule" value="org.zhiqim.kernel.schedule.Scheduler" type="protected" desc="定时任务服务"/> </group>
一、Timer(每隔指定时长执行,可以配置到管理器,也可以编码方式创建)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Timer:1000,3000,-1" type="protected" desc="每3秒执行,首次等待1秒"/> </group>
public static void main(String[] args) { //每1分种执行 Timer.sheduler(new Task(), 1000 * 60); }
public static void main(String[] args) { //每3秒执行,首次等待1秒 Timer.sheduler(new Task(), 1000 * 1, 1000 * 3); }
public static void main(String[] args) { //每3秒执行(总执行3次就结束),首次等待1秒 Timer.sheduler(new Task(), 1000 * 1, 1000 * 3, 3); }
二、Minute(指定每分钟的第S秒执行)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute:0:true" type="protected" desc="每分钟0秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每1分种3秒时执行 scheduler.addTask(new Minute(new Task(), 3)); }
三、Minute3(指定每3分钟的第M分钟第S秒执行,M取值0-2之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute3:0,0:false" type="protected" desc="每3分钟0秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔3分种后的1分钟的第3秒时执行,即每小时(1、4、7、10、13、16、19、22、25、28、31、34、37、40、43、46、49、52、55、58)分钟的第3秒会执行 scheduler.addTask(new Minute3(new Task(), 1, 3)); }
四、Minute5(指定每3分钟的第M分钟第S秒执行,M取值0-4之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute5:0,0:false" type="protected" desc="每5分钟0秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔5分种后的1分钟的第3秒时执行,即每小时(1、6、11、16、21、26、31、36、41、46、51、56)分钟的第3秒会执行 scheduler.addTask(new Minute5(new Task(), 1, 3)); }
五、Minute10(指定每10分钟的第M分钟第S秒执行,M取值0-9之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute10:0,0:false" type="protected" desc="每10分钟0秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔10分种后的1分钟的第3秒时执行,即每小时(1、11、21、31、41、51)分钟的第3秒会执行 scheduler.addTask(new Minute10(new Task(), 1, 3)); }
六、Minute15(指定每15分钟的第M分钟第S秒执行,M取值0-14之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute15:0,0:false" type="protected" desc="每15分钟0秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔15分种后的1分钟的第3秒时执行,即每小时(1、16、31、46)分钟的第3秒会执行 scheduler.addTask(new Minute15(new Task(), 1, 3)); }
七、Minute20(指定每20分钟的第M分钟第S秒执行,M取值0-19之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute20:0,0:false" type="protected" desc="每20分钟0秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔20分种后的1分钟的第3秒时执行,即每小时(1、21、41)分钟的第3秒会执行 scheduler.addTask(new Minute20(new Task(), 1, 3)); }
八、Minute30(指定每30分钟的第M分钟第S秒执行,M取值0-29之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Minute30:9,5:false" type="protected" desc="每30分钟的第9分钟5秒执行,首次不追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔30分种后的1分钟的第3秒时执行,即每小时(1、31)分钟的第3秒会执行 scheduler.addTask(new Minute20(new Task(), 1, 3)); }
九、Hour(指定每小时的第M分钟第S秒执行,M取值0-59之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Hour:9,5:true" type="protected" desc="每小时的第9分钟5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔小时的第1分钟的第3秒时执行,即每小时1分钟的第3秒会执行 scheduler.addTask(new Hour(new Task(), 1, 3)); }
十、Hour2(指定每2小时的第H小时第M分钟第S秒执行,H取值0-1之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Hour2:0,9,5:true" type="protected" desc="每2小时后的第9分钟5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔2小时的第1小时第1分钟的第3秒时执行,即每天(1,3,5,7,9,11,13,15,17,19,21,23点)1分钟的第3秒会执行 scheduler.addTask(new Hour2(new Task(), 1, 1, 3)); }
十一、Hour3(指定每3小时的第H小时第M分钟第S秒执行,H取值0-2之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Hour3:0,9,5:true" type="protected" desc="每3小时后的第9分钟5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔3小时的第1小时第1分钟的第3秒时执行,即每天(1,4,7,10,13,16,19,22点)1分钟的第3秒会执行 scheduler.addTask(new Hour3(new Task(), 1, 1, 3)); }
十二、Hour6(指定每6小时的第H小时第M分钟第S秒执行,H取值0-5之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Hour6:0,9,5:true" type="protected" desc="每6小时后的第9分钟5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔6小时的第1小时第1分钟的第3秒时执行,即每天(1,7,13,19点)1分钟的第3秒会执行 scheduler.addTask(new Hour6(new Task(), 1, 1, 3)); }
十三、Hour12(指定每12小时的第H小时第M分钟第S秒执行,H取值0-11之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Hour12:0,9,5:true" type="protected" desc="每6小时后的第9分钟5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每隔12小时的第1小时第1分钟的第3秒时执行,即每天(1,13点)1分钟的第3秒会执行 scheduler.addTask(new Hour12(new Task(), 1, 1, 3)); }
十四、Day(指定每天的第H小时第M分钟第S秒执行,H取值0-23之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Day:3,35,5:true" type="protected" desc="每天的3点35分5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每天的第1小时第1分钟的第3秒时执行 scheduler.addTask(new Day(new Task(), 1, 1, 3)); }
十五、Week(指定每周的周W的第H小时第M分钟第S秒执行,W取值1-7之间)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Week:1,3,35,5:true" type="protected" desc="每周一的3点35分5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每周一的第1小时第1分钟的第3秒时执行 scheduler.addTask(new Week(new Task(), 1, 1, 1, 3)); }
十六、Month(指定每月第D日第H小时第M分钟第S秒执行,D取值1-28之间,0表示月末)
<group id="schedule" desc="时钟任务配置"> <item key="org.zhiqim.example.Task" value="Month:1,3,35,5:true" type="protected" desc="每月1号的3点35分5秒执行,首次追赶"/> </group>
public static void main(String[] args) { Scheduler scheduler = new Scheduler(); //每月1号的第1小时第1分钟的第3秒时执行 scheduler.addTask(new Month(new Task(), 1, 1, 1, 3)); }