Quartz源码分析之Job

Quartz首当其冲就是Job类,这个接口主要描述了需要执行job的逻辑,所有的job都要实现Job接口。
Job接口定义如下:

void execute(JobExecutionContext context)
        throws JobExecutionException;

之所以定义一个execute方法来所有的job来实现,是因为这样可以被框架来统一调用。

JobDetail接口,用于描述job的具体信息,主要字段定义如下:

public JobKey getKey();
public String getDescription();
public Class<? extends Job> getJobClass();
public JobDataMap getJobDataMap();
public boolean isDurable();

JobDetailImpl类,这个类是JobDetail接口的具体实现,用于记录需要执行job的信息:

private String name;

    private String group = Scheduler.DEFAULT_GROUP;

    private String description;

    private Class<? extends Job> jobClass;

    private JobDataMap jobDataMap;

    private boolean durability = false;

    private boolean shouldRecover = false;

    private transient JobKey key = null;

这些信息用于记录job的名称,描述,组信息(一般都是default),job关联的数据,JobKey的实现主要是name和group。用于唯一标识一个job。

JobBuilder类用于描述JobDetail的构造过程:
字段定义如下:

    private JobKey key;
    private String description;
    private Class<? extends Job> jobClass;
    private boolean durability;
    private boolean shouldRecover;

    private JobDataMap jobDataMap = new JobDataMap();

这些字段和JobDetail类的字段一样,这些字段用于构造JobDetail类。
通过之前的示例可以看到首先调用了newJob方法返回JobBuilder对象,方法如下:

public static JobBuilder newJob(Class <? extends Job> jobClass) {
        JobBuilder b = new JobBuilder();
        b.ofType(jobClass);
        return b;
    }
public JobBuilder ofType(Class <? extends Job> jobClazz) {
        this.jobClass = jobClazz;
        return this;
    }

这个方法主要是设置了需要执行的job class。再看设置其他字段信息的逻辑:

JobDetailImpl job = new JobDetailImpl();        
job.setJobClass(jobClass);
job.setDescription(description);
if(key == null)
      key = new JobKey(Key.createUniqueName(null), null);
job.setKey(key); 
job.setDurability(durability);
job.setRequestsRecovery(shouldRecover);  
if(!jobDataMap.isEmpty())
      job.setJobDataMap(jobDataMap);
return job;

这里设置了job需要执行的接口,描述,key等信息。最后返回一个JobDetailImpl 对象。到这里为止,一个Job类的构造就算结束了。

你可能感兴趣的:(源码,quartz)