Trigger用于记录job的启动时间,失效日期,描述,是否删除等信息。我们使用的代码调用如下:
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger","group1").startAt(runTime).build();
先看Trigger的定义:
public enum TriggerState { NONE, NORMAL, PAUSED, COMPLETE, ERROR, BLOCKED }
public enum CompletedExecutionInstruction { NOOP, RE_EXECUTE_JOB, SET_TRIGGER_COMPLETE, DELETE_TRIGGER,
public static final int MISFIRE_INSTRUCTION_SMART_POLICY = 0;
public String getDescription();
public String getCalendarName();
public JobDataMap getJobDataMap();
public boolean mayFireAgain();
public Date getStartTime();
public Date getEndTime();
public Date getNextFireTime();
public Date getPreviousFireTime();
主要定义了如上这些接口操作,包括了是否从trigger 列表中删除,开始执行时间,失效日期,下一次执行时间,上一次执行时间等内容。
看TriggerBuilder的逻辑:
这里首先调用了newTrigger()方法,这个类有如下字段:
private TriggerKey key;
private String description;
private Date startTime = new Date();
private Date endTime;
private int priority = Trigger.DEFAULT_PRIORITY;
private String calendarName;
private JobKey jobKey;
private JobDataMap jobDataMap = new JobDataMap();
newTrigger()方法调用了私有的TriggerBuilder()构造函数。初始化了如上参数。
public static TriggerBuilder<Trigger> newTrigger() {
return new TriggerBuilder<Trigger>();
}
private TriggerBuilder() {}
withIdentify()方法构造了TriggerKey类,用户初始化上面TriggerKey这个字段,同时返回TriggerBuilder类。
public TriggerBuilder<T> withIdentity(String name, String group) {
key = new TriggerKey(name, group);
return this;
}
再次调用了startAt()来初始化trigger启动的时间:
public TriggerBuilder<T> withIdentity(String name, String group) {
key = new TriggerKey(name, group);
return this;
}
最后调用build()方法:
public T build() {
if(scheduleBuilder == null)
scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
MutableTrigger trig = scheduleBuilder.build();
trig.setCalendarName(calendarName);
trig.setDescription(description);
trig.setStartTime(startTime);
trig.setEndTime(endTime);
if(key == null)
key = new TriggerKey(Key.createUniqueName(null), null);
trig.setKey(key);
if(jobKey != null)
trig.setJobKey(jobKey);
trig.setPriority(priority);
if(!jobDataMap.isEmpty())
trig.setJobDataMap(jobDataMap);
return (T) trig;
}
这里主要有一个MutableTrigger类,这个类被返回到了Trigger接口引用。因此这个类肯定是Trigger的子类。同时设置了Trigger接口中定义的字段。
最主要的是
scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
MutableTrigger trig = scheduleBuilder.build();
看一下SimpleScheduleBuilder 类的逻辑:
public static SimpleScheduleBuilder simpleSchedule() {
return new SimpleScheduleBuilder();
}
这里很简单的返回了一个了SimpleScheduleBuilder对象。同时调用build方法来构造了Trigger对象,主要逻辑在这里了:
public MutableTrigger build() {
SimpleTriggerImpl st = new SimpleTriggerImpl();
st.setRepeatInterval(interval);
st.setRepeatCount(repeatCount);
st.setMisfireInstruction(misfireInstruction);
return st;
}
这里构造了一个SimpleTriggerImpl对象,同时设置了两个属性,这两个属性也是Trigger接口中所要求的。这里Trigger接口很多。至于为什么是这么个设计,后续再逐一分析。