Quartz入门(三) --Cron Trigger

作者: 是夏莞也是CiCi | 来源:发表于2017-06-15 16:47 被阅读26次

    Quartz入门(三) --Cron Trigger

    Cron Trigger是Quartz最重要的特色之一,通过Cron表达式可以确定某类时间,完成类似“每个星期五”,“每天10:00"这种定时的任务

    还是看例子
    MyJob类是要执行的任务啊,这里保持不变

    package ThirdDemo;
    
    import org.quartz.*;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    /**
     * Created by CiCi on 2017/5/2.
     */
    public class MyJob3 implements Job{
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            String jobName = jobExecutionContext.getJobDetail().getKey().getName();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
    
            System.out.println("任务Key" + jobName + "正在执行,执行时间" + dateFormat.format(Calendar.getInstance().getTime()));
        }
    }
    
    
    package ThirdDemo;
    
    import org.quartz.*;
    import org.quartz.impl.StdSchedulerFactory;
    
    
    
    /**
     * Created by CiCi on 2017/5/2.
     */
    public class QuartzCronTest {
        public static void main(String[] args) throws SchedulerException {
            SchedulerFactory factory = new StdSchedulerFactory();
            Scheduler scheduler = factory.getScheduler();
    
            JobDetail job = JobBuilder.newJob(MyJob3.class).withIdentity("Job","group1").build();
            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger","group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0 18 * * ?" )).build();
    
            scheduler.scheduleJob(job,trigger);
            scheduler.start();
    
            try {
                Thread.sleep(60L * 1000L);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    /* 
    -------------------------------------- 
        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分每分触发 
        0 0/5 14 * * ?          每天下午的 2点到2点59分(整点开始,每隔5分触发) 
        0 0/5 14,18 * * ?       每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发) 
        0 0-5 14 * * ?          每天下午的 2点到2点05分每分触发 
        0 10,44 14 ? 3 WED      3月分每周三下午的 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         每月的第三周的星期五开始触发 
        0 0 12 1/5 * ?          每月的第一个中午开始每隔5天触发一次 
        0 11 11 11 11 ?         每年的11月11号 11点11分触发(光棍节) 
    -------------------------------------- 
     */  
    
    

    Quartz Cron 表达式支持到七个域

    • 秒 0-59 , - * /
    • 分 0-59 , - * /
    • 时 0-23 , - * /
    • 日 1-31 , - * ? / L W
    • 月 1-12 或 JAN-DEC , - * /
    • 周 1-7 或 SUN-SAT , - * ? / L #
    • 年 空 或 1970-2099 , - * /
      其中前五项是必选的,周和年是可选的

    其次,通配符,主要的有星号();问号?;减号-;逗号,;斜杠/L字母W字母井号(#)*.

    星号:表示任意时刻
    问号:只能在日或周字段上使用,http://blog.csdn.net/chh_jiang/article/details/4603529 这里有比较清晰的解释,简单的理解就是日期和星期是有冲突的,指定其中一个的话,另外一个是没办法指定的,比如每个月12号和每个星期二,这两个是"互斥"的,不能用日期和周来指定所有“每个是星期二的12号”这个时间。
    减号:范围,如 1-5秒
    逗号:列表,如 1,5,10 秒
    斜杠:等步长序列,如3/13秒 表示 3,16,29,42,55,3,16...
    L:仅在日和周上支持,表示允许的最后一个值,注意不要让范围和列表与L连用
    W:工作日
    井号:为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。

    That's all. Thank U~

    相关文章

      网友评论

        本文标题:Quartz入门(三) --Cron Trigger

        本文链接:https://www.haomeiwen.com/subject/yuluqxtx.html