《pro Spring》学习笔记之Quartz的cronTrigger使用
来源:互联网 发布:最近网络融资骗局 编辑:程序博客网 时间:2024/04/30 15:29
Quartz的出色之处就在于可以使用CronTrigger提供了复杂触发器表达式的支持
Cron表达式的各个部分(前六个是必选,最后一个是可选)
序号 含义 允许的特殊字符
1 秒(0-59) , - * /
2 分(0-59) , - * /
3 时(0-23) , - * /
4 日(1-31) , - * / ? L C
5 月 (JAN-DEC或1-12 , - * /
6 星期 (SUN-STA或1-7) , - / ? L C #
7 年 可选,1970-2099 如果为空,则表示全部时间范围 , - * /
其中星期和日不能同时设置,必须保证一个是?(?含义参考下文)
Cron表达式的通配符和特殊字符
* 表示任意值,这个特殊字符可以被使用在表达式的任域表示该值不需要被检查,因此我们的cron表达式可以在
1970-2099之间的一个月的任意一天,任意月份,或者一周的任意一天触发
? 无特定值,这个特殊的字符通常和其他指定的数值一起使用,表示一个值必须被显示但是不必检查
- 范围,例如在小时部分10-12表示10,11,12
, 列分隔符,允许制定一系列的数值,例如再星期域中指定MON,TUE,WE
/ 增量,这个字符表示一个数值的增量,例如在分钟域中0/1表示从0分开始,每次增加一分钟
如果我们定义5/8 表示从指定小时(或每个小时)的第5分钟开始,每次增加8分钟,但如果开始的时间已经超过
了5分钟,比如说现在已经是6分了,那调度会立刻开始,如果现在是2分,则会等到5分的时候开始
L L是英文中的单词LAST的缩写,他在日期和星期中的意思有一些不同。
当在日期域中使用,它代表这个月的最后一天(3月31或者2月29等等)
当使用在星期中,他永远表示的是一个数值 7-saturday(星期六),星期域中只有L表示每个周六
当希望使用星期中的某一天时,L是最管用的,比如定义每个月的最后一个周五,可以这样表示星期域6L
# 这个值只能在星期域中使用,它代表这个月的第几个星期,例如2#3 表示,本月第3个星期1(pro spring此处错误,参看http://blog.csdn.net/daryl715/archive/2007/09/11/1781143.aspx)
C 这个日期数值允许使用在日期和星期域中。这个日期是根据一个给定的日历计算出来的,在日期雨中给定一个
20C将20号(当前日历包含20号时)或者20号后日历中包含的第一天(当给定日历不包括20号时)激活触发器
,在一个星期域中使用6C表示日历中周五(日历包括周五)或者第一天(不包括周五)
下面,我们看一个实际案例
Job
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzJob implements Job ...{
public void execute(JobExecutionContext context) throws JobExecutionException ...{
System.out.println(context.getFireTime());
System.out.println("this is a message");
}
}
Test
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class TestQuartz ...{
public static void main(String[] args) throws Exception ...{
Scheduler scheduler=new StdSchedulerFactory().getScheduler();
scheduler.start();
JobDetail jobDetail=new JobDetail("messageJob",Scheduler.DEFAULT_GROUP,QuartzJob.class);
String cronExpression="2/5 * 19 ? 9 3";
Trigger trigger=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);
System.out.println(new Date());
scheduler.scheduleJob(jobDetail,trigger);
System.in.read();
}
}
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class TestQuartz ...{
public static void main(String[] args) throws Exception ...{
Scheduler scheduler=new StdSchedulerFactory().getScheduler();
scheduler.start();
JobDetail jobDetail=new JobDetail("messageJob",Scheduler.DEFAULT_GROUP,QuartzJob.class);
String cronExpression="2/5 * 19 ? 9 3";
Trigger trigger=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);
System.out.println(new Date());
scheduler.scheduleJob(jobDetail,trigger);
System.in.read();
}
}
其中2/5 * 19 ? 9 3 表示,从第2秒起每5秒执行一次,每天19时,9月份,日期不做检查,星期2
结果如下:
Tue Sep 11 19:52:02 CST 2007
this is a message
Tue Sep 11 19:52:07 CST 2007
this is a message
Tue Sep 11 19:52:12 CST 2007
this is a message
如果其中有一天是节假日,我们再节假日不用进行调度,则进行如下代码操作
cal.set(2005,Calendar.DECEMBER,25); 2005年11月25日
HolidayCalendar calendar=new HolidayCalendar ();
calendar.addExcludedDate(cal.getTime());
scheduler.addClaendar("xmasCalendar",calendar,true,false);
trigger.setClaendarName("xmasCalendar");
- 《pro Spring》学习笔记之Quartz的cronTrigger使用
- 《pro Spring》学习笔记之使用Spring配置Quartz
- Quartz学习之Lesson6-CronTrigger
- Quartz学习之二-CronTrigger
- 《Pro Spring》学习笔记之beanFactory的嵌套使用
- 《Pro Spring》学习笔记之SqlUpdate的使用
- 《pro Spring》一书中关于quartz cronTrigger表达式通配符的严重错误
- 《pro Spring》学习笔记之使用Spring+James邮件服务器发送带有附件的HTML邮件
- 《Pro Spring》学习笔记之FactoryBean使用(非BeanFactory)
- 《Pro Spring》学习笔记之FactoryBean使用(非BeanFactory)
- Quartz之CronTrigger
- Quartz之CronTrigger
- 《Pro Spring》学习笔记之混淆的构造器注入
- 《Pro Spring》学习笔记之Bean的继承
- 《Pro Spring》学习笔记之ApplicationContext的事件机制
- 《Pro Spring》学习笔记之Advisor的便利实现
- 《Pro Spring》学习笔记之JMS的事务控制
- Quartz学习笔记(二)—— Job和CronTrigger
- 网络协议扫盲
- 批处理编程- -介绍(从别人哪里弄的,自己学习了一下)
- 二叉树的C++源码
- windows XP 的命令大全(转载)
- 牛仔裤不会一直等你
- 《pro Spring》学习笔记之Quartz的cronTrigger使用
- 上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片
- jmf摄像头applet
- 什么是交叉编译-嵌入式基础系列(网络查找)
- windows变量前缀总结(原创)
- How the 80/20 rule can help you be more effective.
- arm-linux-gcc和arm-elf-gcc的区别-嵌入式基础系列(网络查找)
- Facing Business Challenges at Holiday Inn Worldwide
- SNDCP学习笔记一(概述)