什么是“时钟定时任务”?
“知启蒙时钟定时任务”是线程式时钟定时任务,有两种任务机制, 第一种是每隔指定时间执行(Timer),另一种是指定时间点执行,时间粒度为秒,每秒由时刻安排线程管理器(Scheduler)检查并通知。
知启蒙时钟有三大特点
1、执行保护机制,即任务执行时间超过指定时长时,此时产生的第二个任务向后顺延,排除无效的并发错乱。
2、首次追赶执行机制,即系统启动时任务执行时间已过,是否追赶执行,由配置设定。
3、随系统时钟切换机制,即任务执行跟随系统时钟,如当前系统时间12:05,指定每小时0分0秒执行,只需修改系统到12:59:50秒,等10秒即会执行。解决测试等待的烦扰。
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));
}