trigger.java
来自「定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目」· Java 代码 · 共 867 行 · 第 1/2 页
JAVA
867 行
* Set whether or not the <code>Trigger</code> should be persisted in the * <code>{@link org.quartz.spi.JobStore}</code> for re-use after program * restarts. * </p> */ public void setVolatility(boolean volatility) { this.volatility = volatility; } /** * <p> * Associate the <code>{@link Calendar}</code> with the given name with * this Trigger. * </p> * * @param calendarName * use <code>null</code> to dis-associate a Calendar. */ public void setCalendarName(String calendarName) { this.calendarName = calendarName; } /** * <p> * Get the name of the <code>{@link Calendar}</code> associated with this * Trigger. * </p> * * @return <code>null</code> if there is no associated Calendar. */ public String getCalendarName() { return calendarName; } /** * <p> * Whether or not the <code>Trigger</code> should be persisted in the * <code>{@link org.quartz.spi.JobStore}</code> for re-use after program * restarts. * </p> * * <p> * If not explicitly set, the default value is <code>false</code>. * </p> * * @return <code>true</code> if the <code>Trigger</code> should be * garbage collected along with the <code>{@link Scheduler}</code>. */ public boolean isVolatile() { return volatility; } /** * <p> * Add the specified name of a <code>{@link TriggerListener}</code> to * the end of the <code>Trigger</code>'s list of listeners. * </p> */ public void addTriggerListener(String name) { triggerListeners.add(name); } /** * <p> * Remove the specified name of a <code>{@link TriggerListener}</code> * from the <code>Trigger</code>'s list of listeners. * </p> * * @return true if the given name was found in the list, and removed */ public boolean removeTriggerListener(String name) { return triggerListeners.remove(name); } /** * <p> * Returns an array of <code>String</code> s containing the names of all * <code>{@link TriggerListener}</code> assigned to the <code>Trigger</code>, * in the order in which they should be notified. * </p> */ public String[] getTriggerListenerNames() { String[] outNames = new String[triggerListeners.size()]; return (String[]) triggerListeners.toArray(outNames); } /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * Called when the <code>{@link Scheduler}</code> has decided to 'fire' * the trigger (execute the associated <code>Job</code>), in order to * give the <code>Trigger</code> a chance to update itself for its next * triggering (if any). * </p> * * @see #executionComplete(JobExecutionContext, JobExecutionException) */ public abstract void triggered(Calendar calendar); /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * Called by the scheduler at the time a <code>Trigger</code> is first * added to the scheduler, in order to have the <code>Trigger</code> * compute its first fire time, based on any associated calendar. * </p> * * <p> * After this method has been called, <code>getNextFireTime()</code> * should return a valid answer. * </p> * * @return the first time at which the <code>Trigger</code> will be fired * by the scheduler, which is also the same value <code>getNextFireTime()</code> * will return (until after the first firing of the <code>Trigger</code>). * </p> */ public abstract Date computeFirstFireTime(Calendar calendar); /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * Called after the <code>{@link Scheduler}</code> has executed the * <code>{@link org.quartz.JobDetail}</code> associated with the <code>Trigger</code> * in order to get the final instruction code from the trigger. * </p> * * @param context * is the <code>JobExecutionContext</code> that was used by the * <code>Job</code>'s<code>execute(xx)</code> method. * @param result * is the <code>JobExecutionException</code> thrown by the * <code>Job</code>, if any (may be null). * @return one of the Trigger.INSTRUCTION_XXX constants. * * @see #INSTRUCTION_NOOP * @see #INSTRUCTION_RE_EXECUTE_JOB * @see #INSTRUCTION_DELETE_TRIGGER * @see #INSTRUCTION_SET_TRIGGER_COMPLETE * @see #triggered(Calendar) */ public abstract int executionComplete(JobExecutionContext context, JobExecutionException result); /** * <p> * Used by the <code>{@link Scheduler}</code> to determine whether or not * it is possible for this <code>Trigger</code> to fire again. * </p> * * <p> * If the returned value is <code>false</code> then the <code>Scheduler</code> * may remove the <code>Trigger</code> from the <code>{@link org.quartz.spi.JobStore}</code>. * </p> */ public abstract boolean mayFireAgain(); /** * <p> * Get the time at which the <code>Trigger</code> should occur. * </p> */ public abstract Date getStartTime(); public abstract void setStartTime(Date startTime); public abstract void setEndTime(Date endTime); /** * <p> * Get the time at which the <code>Trigger</code> should quit repeating - * even if an assigned 'repeatCount' isn't yet satisfied. * </p> * * @see #getFinalFireTime() */ public abstract Date getEndTime(); /** * <p> * Returns the next time at which the <code>Trigger</code> will fire. If * the trigger will not fire again, <code>null</code> will be returned. * The value returned is not guaranteed to be valid until after the <code>Trigger</code> * has been added to the scheduler. * </p> */ public abstract Date getNextFireTime(); /** * <p> * Returns the previous time at which the <code>Trigger</code> will fire. * If the trigger has not yet fired, <code>null</code> will be returned. */ public abstract Date getPreviousFireTime(); /** * <p> * Returns the next time at which the <code>Trigger</code> will fire, * after the given time. If the trigger will not fire after the given time, * <code>null</code> will be returned. * </p> */ public abstract Date getFireTimeAfter(Date afterTime); /** * <p> * Returns the last time at which the <code>Trigger</code> will fire, if * the Trigger will repeat indefinitely, null will be returned. * </p> * * <p> * Note that the return time *may* be in the past. * </p> */ public abstract Date getFinalFireTime(); /** * <p> * Set the instruction the <code>Scheduler</code> should be given for * handling misfire situations for this <code>Trigger</code>- the * concrete <code>Trigger</code> type that you are using will have * defined a set of additional <code>MISFIRE_INSTRUCTION_XXX</code> * constants that may be passed to this method. * </p> * * <p> * If not explicitly set, the default value is <code>MISFIRE_INSTRUCTION_SMART_POLICY</code>. * </p> * * @see #MISFIRE_INSTRUCTION_SMART_POLICY * @see #updateAfterMisfire(Calendar) * @see SimpleTrigger * @see CronTrigger */ public void setMisfireInstruction(int misfireInstruction) { if (!validateMisfireInstruction(misfireInstruction)) throw new IllegalArgumentException( "The misfire instruction code is invalid for this type of trigger."); this.misfireInstruction = misfireInstruction; } protected abstract boolean validateMisfireInstruction(int misfireInstruction); /** * <p> * Get the instruction the <code>Scheduler</code> should be given for * handling misfire situations for this <code>Trigger</code>- the * concrete <code>Trigger</code> type that you are using will have * defined a set of additional <code>MISFIRE_INSTRUCTION_XXX</code> * constants that may be passed to this method. * </p> * * <p> * If not explicitly set, the default value is <code>MISFIRE_INSTRUCTION_SMART_POLICY</code>. * </p> * * @see #MISFIRE_INSTRUCTION_SMART_POLICY * @see #updateAfterMisfire(Calendar) * @see SimpleTrigger * @see CronTrigger */ public int getMisfireInstruction() { return misfireInstruction; } /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * To be implemented by the concrete classes that extend this class. * </p> * * <p> * The implementation should update the <code>Trigger</code>'s state * based on the MISFIRE_INSTRUCTION_XXX that was selected when the <code>Trigger</code> * was created. * </p> */ public abstract void updateAfterMisfire(Calendar cal); /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * To be implemented by the concrete class. * </p> * * <p> * The implementation should update the <code>Trigger</code>'s state * based on the given new version of the associated <code>Calendar</code> * (the state should be updated so that it's next fire time is appropriate * given the Calendar's new settings). * </p> * * @param cal */ public abstract void updateWithNewCalendar(Calendar cal, long misfireThreshold); /** * <p> * Validates whether the properties of the <code>JobDetail</code> are * valid for submission into a <code>Scheduler</code>. * * @throws IllegalStateException * if a required property (such as Name, Group, Class) is not * set. */ public void validate() throws SchedulerException { if (name == null) throw new SchedulerException("Trigger's name cannot be null", SchedulerException.ERR_CLIENT_ERROR); if (group == null) throw new SchedulerException("Trigger's group cannot be null", SchedulerException.ERR_CLIENT_ERROR); if (jobName == null) throw new SchedulerException( "Trigger's related Job's name cannot be null", SchedulerException.ERR_CLIENT_ERROR); if (jobGroup == null) throw new SchedulerException( "Trigger's related Job's group cannot be null", SchedulerException.ERR_CLIENT_ERROR); } /** * <p> * This method should not be used by the Quartz client. * </p> * * <p> * Usable by <code>{@link org.quartz.spi.JobStore}</code> * implementations, in order to facilitate 'recognizing' instances of fired * <code>Trigger</code> s as their jobs complete execution. * </p> * * */ public void setFireInstanceId(String id) { this.fireInstanceId = id; } /** * <p> * This method should not be used by the Quartz client. * </p> */ public String getFireInstanceId() { return fireInstanceId; } /** * <p> * Return a simple string representation of this object. * </p> */ public String toString() { return "Trigger '" + getFullName() + "': triggerClass: '" + getClass().getName() + " isVolatile: " + isVolatile() + " calendar: '" + getCalendarName() + "' misfireInstruction: " + getMisfireInstruction() + " nextFireTime: " + getNextFireTime(); } /** * <p> * Compare the next fire time of this <code>Trigger</code> to that of * another. * </p> */ public int compareTo(Object obj) { Trigger other = (Trigger) obj; Date myTime = getNextFireTime(); Date otherTime = other.getNextFireTime(); if (myTime == null && otherTime == null) return 0; if (myTime == null) return 1; if (otherTime == null) return -1; if(myTime.before(otherTime)) return -1; if(myTime.after(otherTime)) return 1; return 0; } public boolean equals(Object obj) { if (!(obj instanceof Trigger)) return false; Trigger other = (Trigger) obj; if (!other.getName().equals(getName())) return false; if (!other.getGroup().equals(getGroup())) return false; return true; } public int hashCode() { return getFullName().hashCode(); } public Object clone() { Trigger copy; try { copy = (Trigger) super.clone(); } catch (CloneNotSupportedException ex) { throw new IncompatibleClassChangeError("Not Cloneable."); } return copy; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?