您的位置:首页 > 其它

Quartz源码分析之Job

2016-03-23 22:29 465 查看
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 源码