Quartz是一个完全由java编写的开源作业调度框架,可以用来创建简单或运行十个、百个甚至是更复杂的程序。而我主要用的是用来设置定时完成任务。首先来看一下如何配置定时任务的时间。
CronTrigger时间格式配置说明:
格式:秒 分 时 日 月 周 年
常用示例:
0 0 12 * * ? 每天12点触发
0 15 10 ?* * 每天10点15触发
0 * 14 * * ? 每天14点到14点59分每分触发
0 0/5 14 * * ? 每天14点到14点59分从整点开始,每隔5分钟触发一次
0 0-5 14 * * ? 每天14点到14点5分每分钟触发一次
通配符说明:
* :表示所有值,"*"在子表示式(月)表示每个月的含义。
/ : 用来指定数值的增量, 如上例在(分)表示从0分钟开始,每隔五分钟执行一次
?:仅被用于月和星期两个子表达式,表示不指定值,当2个子表达式其中之一被指定了值之后,为“了 避免冲突,需要将另一个自表达式设为"?"
L : “L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写
在两个子表达式里的含义是不同的。
在月子表达式中,“L”表示一个月的最后一天 ,
在星期自表达式中,“L”表示一个星期的最后一天,也就是SAT
例如:“4L”表示这个月的倒数第4天,“FRIL”表示这个月的最后一个星期五
注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
上述已经分析了每个通配符的含义,下面就看看在项目中的应用:
配置文件中配置时间:
<task:scheduled ref="weixinRuleJob" method="beginDayRules" cron="0 0 0 * * ?" />
java文件中调用:
@Service("TimeFixedSend")
public class TimeFixedSend{
MailUitl mailUitl = new MailUitl();
public void schedualJob(){
System.out.println("开始执行指定任务.");
//调用发送邮件的功能
mailUitl.sendMail("dayMail");
System.out.println("上一次的任务还未结束");
}
}
注意:一定要加上Service,否则找不到方法
总结:定时任务完成有多种方式,之前用的是java的timer类来完成这个任务的,但使用timer需要去重新开启一个线程,这对程序来说,又是一种负担,经过他人的指点,采用这种方式,而且这种方式比Timer的时间精确度要高。