美文网首页
Quartz[0]-Quartz入门范例

Quartz[0]-Quartz入门范例

作者: JohnShen | 来源:发表于2016-03-08 17:05 被阅读411次

Quartz是一个优秀的Java任务调度框架,由于不久之后可能要做这方面的项目,这里先对它进行一些知识的储备。
创建一个Demo小程序来演示Quartz的基本用法,看下面这个示例:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * Author: zhun.shen
 * Date: 2016-03-08 15:48
 * Description:
 */
public class Demo {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        /**
         * 启动调度器线程,并且注销其上的所以触发器对象,
         * 如果需要保留其上的触发器,应该调用standby()方法
         */
        scheduler.start();

        /**
         * 使用JobBuilder构建一个任务。
         *
         * 这个任务通过“一个实现了Job接口的类”指定任务的执行实现类,
         * withIdentity(name, group)方法指定类任务的“名称”和“组名”,可以理解为key,用于标识这个任务;
         * build()方法执行构建,构建出的对象为JobDetail。
         */
        JobDetail job = JobBuilder.newJob(DemoJob.class)
                .withIdentity("myJob", "group1")
                .build();

        /**
         * 使用TriggerBuilder构建一个触发器。
         *
         * withIdentity(name, group)方法指定类触发器的“名称”和“组名”,用于标识这个触发器;
         * startNow()方法表示这个触发器在当前的时间就应该开始触发任务,然而这个时候触发器可能还没有作用在调度器上;
         * withSchedule(scheduleBuilder)方法指定这个触发器的调度规则,例子中的为“每2秒触发一次,永不停止”。
         */
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                .build();

        /**
         * 调度器真正开始调度任务
         */
        scheduler.scheduleJob(job, trigger);
    }
}
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * Author: zhun.shen
 * Date: 2016-03-08 15:52
 * Description:
 */
public class DemoJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("I will sleep in 3 seconds.");
        try {
            Thread.currentThread().sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("HA HA HA, I am running!!!");
    }
}

对于代码的含义,已在注释中说明。这里记录一下自己对这里面的几个概念的理解:

  • Job:任务,实际上这是一个接口,供其它类去实现任务的具体处理过程。
  • JobDetail:任务细节,这是通过Job的实现类构建出的任务的真正执行者。注意,这里每次被调度执行任务的时候,都会根据实现类创建一个新的对象
  • Trigger:触发器,用来定义任务的调度规则,比如“执行时机”,“执行频率”等。
  • Scheduler:调度器,用来根据触发器定义的调度规则,去调度对应的任务去执行。
  • 其它:比如SchedulerFactory、JobBuilder、TriggerBuilder都是构建对应实例的工具类,比较容易理解。

相关文章

网友评论

      本文标题:Quartz[0]-Quartz入门范例

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