Quartz 源码解读-初识Quartz

02 Quartz-初识Quartz-组件解释

2019-05-20  本文已影响0人  花神子

02 Quartz-初识Quartz-组件

quartz

01 Quartz-初识Quartz-样例入手 实现了一个简单运行demo. 正常情况下也能运行起来,进行日志输出!

本篇根据这个demo 对其一些组件进行一个解释析!

Quartz 名词定义

1. Job

Quartz中的Job是什么?

package org.quartz;

public interface Job {
    public void execute(JobExecutionContext context)
      throws JobExecutionException;
}

...其他特性参考:

2. JobDetail

Quartz中的JobDetail是什么?
通过对Job的理解,我们知道非常容易实现,只需要实现Job 接口,重写execute方法。这样我们就实现了一个Job接口的类,但是呢这个类的功能其实我们也知道它仅仅是完成某个功能/任务,除此之外:Quartz还需要知道该Job实例所包含的属性;这将由JobDetail类来完成。

JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroup).build();
...
scheduler.scheduleJob(jobDetail, trigger);
// add data to JobDataMap
JobDetail job = newJob(DumbJob.class)
    .withIdentity("myJob", "group1") // name "myJob", group "group1"
    .usingJobData("data1", "aaa")
    .usingJobData("data2", "bbb")
    .build();
//get data from JobDataMap
public class MybJob implements Job { 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
        JobKey key = context.getJobDetail().getKey(); 
        JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
        String data1 = dataMap.getString("jobSays"); 
        String data2 = dataMap.getFloat("myFloatValue"); 
        System.err.println("data1 " + data1 + ", and data2 is: " + data2); 
    } 
}

3. Trigger

TriggerBuilder<Trigger> triggerBuilder  = TriggerBuilder
        .newTrigger()
        .withIdentity(jobName, jobGroup); 
Trigger trigger = triggerBuilder
        .startAt(triggerDate)
        .withSchedule(schedBuilder)
        .build(); // 将job trigger放入scheduler scheduler.scheduleJob(jobDetail, trigger);

4. Scheduler

public class QuartzScheduler {

    /**
     * 定义 全局 Scheduler 方便以下方法使用
     */
    private static Scheduler scheduler;

    /**Scheduler
     * 初始化
     */
    static {
        try {
            scheduler = getSechduler();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取Scheduler instance
     * 实际生产中不建议这么做:最好采用资源隔离的方式;避免任务过多进行资源抢占导致任务misfire
     * @return
     * @throws SchedulerException
     */
    public static Scheduler getSechduler() throws SchedulerException {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        if (scheduler == null) {
            synchronized (QuartzScheduler.class) {
                if (scheduler == null) {
                    scheduler = schedulerFactory.getScheduler();
                }
            }
        }
        return scheduler;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读