cron表达式(quartz中时间表达式)

来源:互联网 发布:多系统引导软件 编辑:程序博客网 时间:2024/04/30 15:49

Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨 大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构  建,JavaMail及其它,支持cron-like表达式等等。

该项目已经被 Terracotta收购。

Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示:

表1 Cron表达式时间字段

Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:

●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;

●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;

●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;

●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;

●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;

●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个 月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;

●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的 工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注 意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日 期范围;

●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;

●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;

● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。

Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。

表2下面给出一些完整的Cron表示式的实例:


===============================================================
附上自己的一个例子:

Java代码 复制代码收藏代码
  1. package job; 
  2.  
  3. import java.text.ParseException; 
  4. import java.util.ArrayList; 
  5. import java.util.Date; 
  6.  
  7. import org.quartz.CronTrigger; 
  8. import org.quartz.JobDetail; 
  9. import org.quartz.Scheduler; 
  10. import org.quartz.SchedulerException; 
  11. import org.quartz.SchedulerFactory; 
  12. import org.quartz.SchedulerMetaData; 
  13. import org.quartz.SimpleTrigger; 
  14. import org.quartz.Trigger; 
  15. import org.quartz.TriggerUtils; 
  16. import org.quartz.impl.StdSchedulerFactory; 
  17.  
  18. public class TimerTest { 
  19.  
  20.     public staticvoid main(String[] string) throws ParseException { 
  21.         SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); 
  22.  
  23.         Scheduler sched; 
  24.         try
  25.             //创建调度 
  26. //          sched = schedFact.getScheduler(); 
  27.             sched = StdSchedulerFactory.getDefaultScheduler(); 
  28.              
  29.             //创建任务 
  30.             JobDetail jobDetail = new JobDetail("myJob",// job name 
  31.                     sched.DEFAULT_GROUP, // job group (you can also specify 'null' to use the default group) 
  32.                     Job1.class); // the java class to execute 
  33.              
  34.             //传递的参数 
  35.             jobDetail.getJobDataMap().put("who","张三"); 
  36.             jobDetail.getJobDataMap().put("content","你好!"); 
  37.             jobDetail.getJobDataMap().put("myFloatValue",3.141f); 
  38.             jobDetail.getJobDataMap().put("myStateData",new ArrayList()); 
  39.  
  40.             //表达式cron触发器(比较强悍的) 
  41.             CronTrigger cronTrigger = new CronTrigger();  
  42.             cronTrigger.setCronExpression("0/3 10-59 * * * ?"); 
  43.             cronTrigger.setName("tri1"); 
  44.             cronTrigger.setGroup("test"); 
  45.             sched.scheduleJob(jobDetail, cronTrigger); 
  46.              
  47.             //再添加一个任务 
  48.             JobDetail job2 = new JobDetail("myJob2",// job name 
  49.                     sched.DEFAULT_GROUP, // job group (you can also specify 'null' to use the default group) 
  50.                     Job2.class); // the java class to execute 
  51.             CronTrigger cronTrigger2 = new CronTrigger();  
  52.             cronTrigger2.setCronExpression("0/3 10-59 * * * ?");//从0秒开始每隔3秒、从第20到59分钟、所有小时、所有日、所有月、所有周、所有年(可略) 
  53.             cronTrigger2.setName("test002"); 
  54.             cronTrigger2.setGroup("test"); 
  55.             //CronTrigger cronTrigger2 = new CronTrigger("trigger1", "group1", "job2", "group1", "0/20 * * * * ?"); 
  56.             sched.scheduleJob(job2, cronTrigger2); 
  57.              
  58.             //简单触发器 
  59.             /*SimpleTrigger simpleTrigger = new SimpleTrigger();
  60.             simpleTrigger.setStartTime(new Date());
  61.             simpleTrigger.setName("test001");
  62.             cronTrigger.setGroup("test");
  63.             sched.scheduleJob(jobDetail, simpleTrigger);*/ 
  64.              
  65.             //按秒触发器 
  66. //          Trigger trigger = TriggerUtils.makeSecondlyTrigger(3);//每隔3秒 
  67. //          trigger.setStartTime(new Date()); 
  68. //          trigger.setName("test001"); 
  69. //          cronTrigger.setGroup("test"); 
  70. //          sched.scheduleJob(jobDetail, trigger); 
  71.              
  72.             //按天触发器 
  73. //          Trigger trigger = TriggerUtils.makeDailyTrigger(0, 1); 
  74. //          trigger.setStartTime(new Date()); 
  75. //          trigger.setName("myTrigger"); 
  76. //          cronTrigger.setGroup("test"); 
  77. //          sched.scheduleJob(jobDetail, trigger); 
  78.              
  79.              
  80.             //启动调度任务 
  81.             sched.start(); 
  82.  
  83.              
  84. //          sched.pauseAll();//暂停所有任务 
  85. //          scheduler.deleteJob(String jobName, String groupName);//删除制定job 
  86. //          scheduler.resumeAll();//恢复所有任务 
  87.              
  88.              
  89.             //结束调度任务 
  90.             //sched.shutdown(); 
  91.              
  92.  
  93.         } catch (SchedulerException e) { 
  94.             e.printStackTrace(); 
  95.         } 
  96.     } 
Java代码 复制代码收藏代码
  1. package job; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.Date; 
  5.  
  6. import org.quartz.Job; 
  7. import org.quartz.JobDataMap; 
  8. import org.quartz.JobExecutionContext; 
  9. import org.quartz.JobExecutionException; 
  10.  
  11. public class Job1implements Job { 
  12.     public void execute(JobExecutionContext context) 
  13.             throws JobExecutionException { 
  14.         System.out.println("........................................"); 
  15.         String instName = context.getJobDetail().getName(); 
  16.         String instGroup = context.getJobDetail().getGroup(); 
  17.         JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
  18.  
  19.         String who = dataMap.getString("who"); 
  20.         String jobSays = dataMap.getString("content"); 
  21.         float myFloatValue = dataMap.getFloat("myFloatValue"); 
  22.         ArrayList state = (ArrayList) dataMap.get("myStateData"); 
  23.         state.add(new Date()); 
  24.  
  25.         System.out.println("Instance " + instName +" of DumbJob ,"+who+" says: " + jobSays); 
  26.     } 
  27.  
Java代码 复制代码收藏代码
  1. package job; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.Date; 
  5.  
  6. import org.quartz.Job; 
  7. import org.quartz.JobDataMap; 
  8. import org.quartz.JobDetail; 
  9. import org.quartz.JobExecutionContext; 
  10. import org.quartz.JobExecutionException; 
  11. import org.quartz.SchedulerException; 
  12. import org.quartz.SchedulerMetaData; 
  13.  
  14. public class Job2implements Job { 
  15.     public void execute(JobExecutionContext context) 
  16.             throws JobExecutionException { 
  17.         String instName = context.getJobDetail().getName(); 
  18.         String instGroup = context.getJobDetail().getGroup(); 
  19.         JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
  20.  
  21.         try
  22.             /*JobDetail job = context.getScheduler().getJobDetail("test002", "test");
  23.             System.out.println(job.getFullName());*/ 
  24.             SchedulerMetaData metaData = context.getScheduler().getMetaData(); 
  25.             System.out.println("Executed " + metaData.numJobsExecuted() +" jobs."); 
  26.              
  27.         } catch (SchedulerException e) { 
  28.             e.printStackTrace(); 
  29.         } 
  30.         System.out.println("这是任务2!"); 
  31.     } 
  32.  
quartz.properties
Java代码 复制代码收藏代码
  1. org.quartz.scheduler.instanceName = DefaultQuartzScheduler 
  2. org.quartz.scheduler.rmi.export = false 
  3. org.quartz.scheduler.rmi.proxy = false 
  4. org.quartz.scheduler.wrapJobExecutionInUserTransaction = false 
  5.  
  6. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
  7. org.quartz.threadPool.threadCount = 10 
  8. org.quartz.threadPool.threadPriority = 5 
  9. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread =true 
  10.  
  11. org.quartz.jobStore.misfireThreshold = 60000 
  12.  
  13. #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 
  14.  
  15. #内存保存 
  16. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 
  17.  
  18. #持久化到数据库 
  19. #org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
  20. #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
  21. #org.quartz.jobStore.useProperties = true 
  22. #org.quartz.jobStore.tablePrefix = QRTZ_   
  23. #org.quartz.jobStore.isClustered = false   
  24. #org.quartz.jobStore.maxMisfiresToHandleAtATime=1  


=================== 一些资料 ======================================
Quartz任务调度快速入门(实例)
http://www.blogjava.net/baoyaer/articles/155645.html

Quartz的cron表达式:
http://biaoming.iteye.com/blog/39532

Spring配置Quartz例子:
http://www.blogjava.net/javaora/archive/2008/05/19/8070.html
http://loveexception.iteye.com/blog/39516


Quartz在Spring中动态设置cronExpression(spring设置动态定时任务) :
http://hi.baidu.com/vip099/blog/item/51bbb03d555f5702bba16766.html


spring中quartz的多任务调度:
http://hi.baidu.com/yhtysy/blog/item/4f3bf2ca43ab1117bf09e68d.html
另外,quartz还可以实现集群。

如何实现任务的顺序执行
Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,
Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口:
http://hi.baidu.com/lizhi3000/blog/item/0fd9eb3441dbdeb0d0a2d39a.html
(最近集成用到了Quartz,把解决的问题以及解决方法列在下面)

  • 大小: 25 KB
  • 大小: 81.1 KB
  • ______Quartz.rar (39.6 KB)
  • 描述: Quartz概述
  • 下载次数: 19
  • src.rar (2.6 KB)
  • 描述: 一个demo
  • 下载次数: 6
  • quartz-all-1.6.0.jar.rar (372.4 KB)
  • 描述: jar文件,jdk1.4+,log4j
  • 下载次数: 6
原创粉丝点击