Quartz---开始

package com.bobo.quartz;

import com.bobo.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author bobo
 * Created by bobo on 2018/5/16/20:59.
 */

/**
 * Quartz API的关键接口是:
 *  Scheduler - 与调度程序交互的主要API *  Job - 由希望由调度程序执行的组件实现的接口。
 *  JobDetail - 用于定义作业的实例。
 *  Trigger(即触发器) - 定义执行给定作业的计划的组件。
 *  JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
 *  TriggerBuilder - 用于定义/构建触发器实例。
 */

/**
 * Scheduler的生命期,从SchedulerFactory创建它时开始,
 * Scheduler调用shutdown()方法时结束;Scheduler被创建后,
 * 可以增加、删除和列举JobTrigger,以及执行其它与调度相关的操作(如暂停Trigger)。
 * 但是,Scheduler只有在调用start()方法后,才会真正地触发trigger(即执行job)。
 */

/**
 * 触发器的方式有两种,一种是SimpleTrigger,作用是执行一次性的任务,或者是在特定的时间
 * 点执行,重复N次,每次执行的间隔是T个时间单位。
 * 一种是CronTrigger,和linux中的定时任务一致,可以看做是基于日历的调度。
 * 两种调度方式。
 *     第一种是:
 *       //方式一:
 *        Trigger trigger1 = TriggerBuilder
 *           .newTrigger()
 *           .withIdentity("我的第一个触发器", "group1")
 *           .withSchedule(
 *               SimpleScheduleBuilder.simpleSchedule()
 *               .withIntervalInSeconds(5).repeatForever())
 *           .build();
 *     第二种是:
 *            //方式二:
 *         Trigger trigger2 = TriggerBuilder
 *           .newTrigger()
 *           .withIdentity("我的第二个触发器", "group1")
 *           .withSchedule(
 *                CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
 *           .build();
 *其中需要强调的是namegroupkey的作用
 *  在其官方文档中提到
 *       * <p>
 *          <code>Job</code> s and <code>Trigger</code> s have a name and group
 *          associated with them, which should uniquely identify them within a single
 *          <code>{@link Scheduler}</code>. The 'group' feature may be useful for
 *          creating logical groupings or categorizations of <code>Jobs</code> s and
 *          <code>Triggers</code>s. If you don't have need for assigning a group to a
 *          given <code>Jobs</code> of <code>Triggers</code>, then you can use the
 *          <code>DEFAULT_GROUP</code> constant defined on this interface.
 *          </p>
 *  翻译过来的意思是说:jobtrigger有一个关联的namegroup,这两者可以唯一标识他们。
 *                     group特性可以用来创建逻辑分组或者对于jobtrigger分类。如果你不需要
 *                     分类,你可以使用这个接口上定义的DEFAULT_GROUP常量。
 *      JobTrigger注册到Scheduler时,可以为它们设置key *      配置其身份属性。JobTriggerkeyJobKeyTriggerKey)可以用于将JobTrigger放到不同的分组(group)里,
 *      然后基于分组进行操作。同一个分组下的JobTrigger的名称必须唯一,
 *      即一个JobTriggerkey由名称(name)和分组(group)组成。
 *
 */
public class QuartzTest02 {
    public static void main(String[] args) throws SchedulerException {
        //调度工具
        SchedulerFactory factory=new StdSchedulerFactory();
        //获取调度实例
        Scheduler scheduler=factory.getScheduler();
        //开始一个调度
        scheduler.start();

        //用于定义作业的实例,其中hellojob实现了job这个接口
        JobDetail jobDetail=JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")
                .build();
        //触发器,定义执行给定作业的计划的组件
        Trigger trigger=TriggerBuilder.newTrigger()
                .withIdentity("myTrigger","group1")
                .startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                .build();
        scheduler.scheduleJob(jobDetail,trigger);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25484147/article/details/80465563