zoukankan      html  css  js  c++  java
  • 理解Quartz触发器

    Quartz中一个Job往往是一个任务业务逻辑的实现,Job并不知道何时被执行。那么执行一个Quartz Job的是一个Trigger实例。Quartz Trigger继承了Quartz框架中的org.quartz.Trigger类,在Quartz框架中目前有三个实现的触发器可用:

    · org.quartz.SimpleTrigger

    · org.quartz.CronTrigger

    · org.quartz.NthIncludedDayTrigger

    其实还有一个触发器实现,叫做UICronTrigger,不过在Quartz1.5版本之后,这个触发器便不推荐使用。它主要用在Quartz Web应用程序中,Quartz本身并不再使用。


    使用org.quartz.SimpleTrigger

    从类的命名上,想必聪明的你已经明白,SimpleTrigger主要是针对一些相对简单的时间触发进行配置使用,比如在指定的时间开始然后在一定的时间间隔之内重复执行一个Job,同事可以任意指定重复的次数.下面就是使用一个SimpleTrigger的例子:


    public class Listing_4_9 {
    static Log logger = LogFactory.getLog(Listing_4_9.class);

    public static void main(String[] args) {
    Listing_4_9 example = new Listing_4_9();
    example.startScheduler();
    }

    public void startScheduler() {
    try {
    // 创建并启动调度实例
    Scheduler scheduler =
    StdSchedulerFactory.getDefaultScheduler();
    scheduler.start();
    logger.info("Scheduler has been started");
    JobDetail jobDetail =
    new JobDetail("PrintInfoJob",
    Scheduler.DEFAULT_GROUP,
    PrintInfoJob.class);
    /*
    * 创建一个立即启动的触发器,这个触发器没有结束日期,每一分钟(60000毫秒)
    * 执行一次。
    */
    Trigger trigger =
    new SimpleTrigger("myTrigger",
    Scheduler.DEFAULT_GROUP, new Date(), null,
    SimpleTrigger.REPEAT_INDEFINITELY,
    60000L);
    scheduler.scheduleJob(jobDetail, trigger );
    } catch (SchedulerException ex) {
    logger.error(ex);
    }
    }
    }
    在SimpleTrigger中有多个构造函数。下面的代码创建了一个带有名称和默认组的trigger:

    //No Argument Constructor
    SimpleTrigger sTrigger = new SimpleTrigger("myTrigger", Scheduler.DEFAULT_GROUP);
    上面创建这个触发器在创建后便立即执行,单并且没有重复。同样SimpleTrigger还有其他构造函数参数来配置创建特定时间、重复次数和触发器每次执行的延迟时间,如下面这个构造函数:

    public SimpleTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, int repeatCount, long repeatInterval);
    使用org.quartz.CronTrigger
    CronTrigger可以配置更复杂的触发时刻表,当然使用一个或者多个SimpleTriggers也许同样可以达到效果,但是CronTrigger却可以用更简单的方法解决更复杂的事情。

    CronTrigger的时刻表配置类似于Unix下的cron表达式。比如,可能有这样一个Job需要在每周的星期一和星期五早上8点到9点每五分钟执行一次,如果直接使用SimpleTrigger来实现的话,想必要费一些周折。那么此时就可以使用一个类似于cron表达式的表达语句来指定此触发时刻表。

    "0 0/5 8 ? * MON,FRI"
    try {
    CronTrigger cTrigger = new CronTrigger("myTrigger",
    Scheduler.DEFAULT_GROUP, "0 0/5 8 ? *MON,FRI");
    } catch (ParseException ex) {
    ex.printStackTrace();
    }
    CronTriggers在时刻的触发配置上拥有非常大的弹性,几乎可以创建所有的时刻表表达式。后续我们会更详细的讲解CronTriggers和cron表达式的用法。

    使用 org.quartz.NthIncludedDayTrigger
    org.quartz.NthIncludedDayTrigger是Quartz开发团队在Quartz框架中新添加的一个触发器。它设计的目标是提供不同时间间隔的第n天执行时刻表。比如,你想在每个月的第15日处理财务发票记帐,那么可以使用NthIncludedDayTrigger来完成这项工作。Quartz日历(Calendar)同样可以和一个触发器进行关联来设定双休日或者假期。下面我们来创建一个实例来说明如何使用NthIncludedDayTrigger:

    NthIncludedDayTrigger trigger =
    new NthIncludedDayTrigger("MyTrigger", Scheduler.DEFAULT_GROUP);
    trigger.setN(15);
    trigger.setIntervalType(NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY);

  • 相关阅读:
    SessionFactory Cache 的配置
    乱码处理问题
    格式化当前日期
    JDK的安装
    内存和对象内存池技术在网游开发中的注意点和应用
    Head First设计模式C++实现Strategy模式
    介绍三种将二进制字节字符转换为ASCII方法
    C++风格的类型转换的用法
    i++循环与i循环的执行效率
    系统程序员成长计划组合的威力(一)
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331853.html
Copyright © 2011-2022 走看看