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类的构造就算结束了。