Quartz涉及到JobDetail, Schedule和 trigger, 今天简单进行源码分析:
Trigger
public class TriggerBuilder {}
public interface Trigger extends Serializable, Cloneable, Comparable {}
重点说下CronSchedule:
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0 55 23 ? * *")).build();
继续:
public static CronScheduleBuilder cronSchedule(String cronExpression) {
try {
return cronSchedule(new CronExpression(cronExpression));
} catch (ParseException e) {
// all methods of construction ensure the expression is valid by
// this point...
throw new RuntimeException("CronExpression '" + cronExpression
+ "' is invalid.", e);
}
}
此时涉及到一个新的类CronExpression:
public CronExpression(String cronExpression) throws ParseException {
if (cronExpression == null) {
throw new IllegalArgumentException("cronExpression cannot be null");
}
this.cronExpression = cronExpression.toUpperCase(Locale.US);
buildExpression(this.cronExpression);
}
在buildExpression的时候,会分词解析表达式, 最终结果是这样的:
最终的结果都是存在这里的, 如下图:
继续:
调用这个方法存储每个值:
最终解析存放在每个treeSet中:
现在trigger的任务基本完成
JobDetail
public class JobDetailImpl implements Cloneable, java.io.Serializable, JobDetail {}
public interface JobDetail extends Serializable, Cloneable {}
Schedule
三个实现类:
defaultScheduler.scheduleJob(job1, trigger1);
defaultScheduler.start();
关于schedule, 下次继续