zoukankan      html  css  js  c++  java
  • 03_CronTrigger

    【Cron表达式】

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

    [ 字符说明 ]

    * :可以用在所有字段中,表示对应时间域内的每一个时刻。

    :只能在日期、星期字段中使用。定义为“无意义的值”,相当于占位符。

    :表达一个范围。在小时字段中中"10-12",表示为10点到12点。

    :表示一个列表值。如在星期中使用 “MON , WED , FRI” 表示周一、周三、周五

    /  :x/y表示一个等步长序列。x是起始值,y是增量步长值。如在分钟字段中使用“0/15”,表示在0、15、30、45分钟的时候。“5/20”则表示在5、25、45分钟的时候。*/y等同于0/y。

    L :L只能在日期和星期中使用,表示“Last”。L在日期字段中,表示这个月份的最后一天;L在星期中,表示星期六(等同于7,这里默认一周的最后一天为周六)。在星期字段中,如果L前面还有一个数字X,表示“这个月的最后X天”,如6L表示该月的最后一个星期5。

    W :W只能出现在星期字段里,是对前导日期的修饰,表示该日期最近的工作日。使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。

    LW组合:在日期字段里可以使用LW,当月的最后一个工作日。

    # :只能在星期中使用,表示当月的某个工作日。如6#3表示当月的第3个星期5。(6:星期5,3:第3个),4#5表示当月的第5个星期3,如果当月没有底5个星期三,则忽略不触发。

    C :只能在日期和星期字段中使用,代表"Calendar",计划所有关联的日期,如果日期没有被关联,则相当于日历中的所有日期。5C表示在日期字段中表示5日以后的第1天,1C在星期字段的中相当于星期日后的第1天。

    【Cron表达式的例子】

    "0 0 12 * * ?"              每天中午12点触发 
    "0 15 10 ? * *"            每天上午10:15触发 
    "0 15 10 * * ?"             每天上午10:15触发 
    "0 15 10 * * ? *"          每天上午10:15触发 
    "0 15 10 * * ? 2005"        2005年的每天上午10:15触发 
    "0 * 14 * * ?"       在每天下午2点到下午2:59期间的每1分钟触发 
    "0 0/5 14 * * ?"      在每天下午2点到下午2:55期间的每5分钟触发 
    "0 0/5 14,18 * * ?"     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    "0 0-5 14 * * ?"            在每天下午2点到下午2:05期间的每1分钟触发 
    "0 10,44 14 ? 3 WED"       每年三月的星期三的下午2:10和2:44触发 
    "0 15 10 ? * MON-FRI"      周一至周五的上午10:15触发 
    "0 15 10 15 * ?"               每月15日上午10:15触发 
    "0 15 10 L * ?"                 每月最后一日的上午10:15触发 
    "0 15 10 ? * 6L"                每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
    "0 15 10 ? * 6#3"               每月的第三个星期五上午10:15触发 

    " */5 * * * * ? "                  每隔5秒执行一次

    " 0 */1 * * * ? "                   每隔1分钟执行一次

    " 0 0 23 * * ? "                    每天23点执行一次:

    " 0 0 1 * * ? "                      每天凌晨1点执行一次:

    " 0 0 1 1 * ? "                      每月1号凌晨1点执行一次:

    " 0 0 23 L * ? "                     每月最后一天23点执行一次:

    " 0 0 1 ? * L "                       每周星期天凌晨1点实行一次:

    " 0 26,29,33 * * * ? "            在26分、29分、33分执行一次:

    " 0 0 0,13,18,21 * * ? "         每天的0点、13点、18点、21点都执行一次:

    " 0 0/5 * * * ? "                    每隔5分钟执行一次:

    【工程截图】

    【CronJob.java】

    package com.higgin.cron;
    
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class CronJob implements Job{
        
        public CronJob() {
            System.out.println("---CronJob构造方法---");  //测试每次调用是否会重新创建一个新的CronJob类
        }
        
        @Override
        public void execute(JobExecutionContext jobCtx) throws JobExecutionException {
            System.out.println(jobCtx.getTrigger().getName()+"----任务开始执行了----"+(new Date()));
        }
    
    }

    【CronTriggerRunner.java】

    package com.higgin.cron;
    
    import java.text.ParseException;
    
    import org.quartz.CronExpression;
    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class CronTriggerRunner {
        public static void main(String[] args) {
            try{
                JobDetail jobDetail = new JobDetail("job1_2","jGroup1",CronJob.class);
                
                CronTrigger cronTrigger = new CronTrigger("trigger1_2","tGroup1");
                CronExpression cronExp = new CronExpression("0/5 * * * * ?");//从0秒开始,每隔5秒执行一次
                cronTrigger.setCronExpression(cronExp);
                
                SchedulerFactory schedulerFactory = new StdSchedulerFactory();
                Scheduler scheduler = schedulerFactory.getScheduler();
                
                scheduler.scheduleJob(jobDetail, cronTrigger);
                scheduler.start();
                
            } catch (ParseException e) {
                e.printStackTrace();
            }catch (SchedulerException e) {
                e.printStackTrace();
            }
        }
    }

    【运行结果】

  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/HigginCui/p/6626448.html
Copyright © 2011-2022 走看看