• Quartz_2_简单编程式任务调度使用(CronTrigger)


      第二个要介绍的任务调度器中的触发器是 CronTrigger ,相比较 SimpleTrigger 来说,CronTrigger 相对灵活,对于复杂的业务需求来说,更加的实用。要在使用 CronTrigger 之前,要先介绍下 Cron 表达式。在这里,Cron 表达式的内容使用网上的介绍,理论性的东西,大致都是差不多的。

    Cron 表达式的内容如下:

    其中,表达式中的特殊符号的意义是:

                   “?”字符:表示不确定的值(注意:? 号只能用在日和周域上,但是不能在这两个域上同时使用。假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?,如:0 0 0 * * ?)

                   “,”字符:指定数个值

                   “-”字符:指定一个值的范围

                   “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

                   “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

                   “W”字符:指定离给定日期最近的工作日(周一到周五)

                   “#”字符:表示该月第几个周X。5#2表示该月第2个周四(每周的第一天是从周日开始的,即:周日的值为:1)

    简单的使用 Cron 的示例如下:

    在每个周一,二, 三和周四的 10:15 AM 0 15 10 ? * MON-FRI
    每月10号的 10:15 AM   0 15 10 10 * ?
    每月最后一天的 10:15 AM 0 15 10 L * ?
    每月最后一个周五的 10:10 AM  0 10 10 ? * 6L
    在 2014, 2015, 2016, 和 2017 年中的每月最后一个周五的 10:10 AM  0 10 10 ? * 6L 2014-2017
    每月第三个周五的 10:15 AM 0 15 10 ? * 6#3
    每月从第一天算起每五天的 12:00 PM (中午) 0 0 12 1/5 * ?
    每一个 11 月 11 号的 11:11 AM 0 11 11 11 11 ?
    三月份每个周三的 2:10 PM 和 2:44 PM 0 10,44 14 ? 3 WED

    但是,如果我想执行:14:00 开始,到 07:00结束的话,不能用单纯的时间间隔了。因为,在跨越了天的情况下,是会出现问题或者没有执行指定的操作的。那这样的话,可以分开执行的,

    如:14:00-07:00的写法是:先执行当天的:* * 14-23 * * ?,再执行第二天的:* * 0-6 * * ?,二者触发的是同一个作业。

      基本的知识介绍完了之后,下面是我自己写的一个简单实用 CronTrigger 的例子,还是和之前的例子类似,2.0.0之后的用法,和2.0.0之前的用法,还是有所区别的。

    (1)首先是作业(Job)类

    /**
     * 0.0.0.1
     */
    package com.test.common.quartz;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    /**
     * 简单的 作业类
     * @author 高青
     * 2014-3-24
     */
    public class QuartzCronTiggerJob implements Job{
    
        @Override
        public void execute(JobExecutionContext jobContext) throws JobExecutionException {
           System.out.println("这是一个 cronTrigger 的测试类");
           
           //这里可以执行具体的业务操作.......
        }
    }

    (2)任务调度器

    /**
     * 0.0.0.1
     */
    package com.test.common.quartz;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDataMap;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    /**
     * cronTrigger 触发器的测试类
     * @author 高青
     * 2014-3-26
     */
    public class QuartzCronTiggerJobTest {
    
        /**
         * 主线程方法
         * @author 高青 
         * 2014-3-26
         * @param args 字符串参数
         * @return*/
        public static void main(String[] args) {
            
            try {
                //得到默认的调度器
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
                
                //定义当前调度器的具体作业对象
                JobDetail jobDetail = JobBuilder.
                                      newJob(QuartzCronTiggerJob.class).
                                      withIdentity("cronTriggerDetail", "cronTriggerDetailGrounp").
                                      build();
                //定义当前具体作业对象的参数
                JobDataMap jobDataMap = jobDetail.getJobDataMap();
                jobDataMap.put("name", "cronTriggerMap");
                jobDataMap.put("group", "cronTriggerGrounp");
                
                //作业的触发器
                CronTrigger cronTrigger = TriggerBuilder.                      //和之前的 SimpleTrigger 类似,现在的 CronTrigger 也是一个接口,通过 Tribuilder 的 build()方法来实例化
                                            newTrigger().
                                            withIdentity("cronTrigger", "cronTrigger").
                                            withSchedule(CronScheduleBuilder.cronSchedule("0 48 14 * * ?")). //在任务调度器中,使用任务调度器的 CronScheduleBuilder 来生成一个具体的 CronTrigger 对象
                                            build();
                //注册作业和触发器
                scheduler.scheduleJob(jobDetail, cronTrigger);
                
                //开始调度任务
                scheduler.start();
            } catch (SchedulerException e) {
                e.printStackTrace();
            }        
        }
    }

    上面就是 2.0 版本的 CronTrigger 的简单使用,可以根据具体的业务,再具体的进行任务的调度操作。

  • 相关阅读:
    【javascript基础】JS计算字符串所占字节数
    mysql设置有外键的主键自增及其他
    spring AOP简单实现代码存放
    Dockerfile指令及docker的常用命令
    ubuntu 16.04 jenkins pipline的实现 最终docker启动服务
    ubuntu16.04 docker安装
    ubuntu16.04 nginx安装
    ubuntu14.04 spring cloud config server + gradle搭建
    ubuntu14.04 python2.7安装MySQLdb
    flask初次搭建rest服务笔记
  • 原文地址:https://www.cnblogs.com/gaoqing/p/3651106.html
Copyright © 2020-2023  润新知