📄 crontrigger.java
字号:
* <p> * If null, the start-time will also be set to the current time, the time * zone will be set the the system's default. * </p> * * @param startTime * A <code>Date</code> set to the time for the <code>Trigger</code> * to fire. * @param endTime * A <code>Date</code> set to the time for the <code>Trigger</code> * to quit repeat firing. */ public CronTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, String cronExpression) throws ParseException { super(name, group, jobName, jobGroup); setCronExpression(cronExpression); if (startTime == null) { startTime = new Date(); } setStartTime(startTime); if (endTime != null) { setEndTime(endTime); } setTimeZone(TimeZone.getDefault()); } /** * <p> * Create a <code>CronTrigger</code> with fire time dictated by the * <code>cronExpression</code> resolved with respect to the specified * <code>timeZone</code> occuring from the <code>startTime</code> until * the given <code>endTime</code>. * </p> * * <p> * If null, the start-time will also be set to the current time. If null, * the time zone will be set to the system's default. * </p> * * @param name * of the <code>Trigger</code> * @param group * of the <code>Trigger</code> * @param jobName * name of the <code>{@link org.quartz.JobDetail}</code> * executed on firetime * @param jobGroup * group of the <code>{@link org.quartz.JobDetail}</code> * executed on firetime * @param startTime * A <code>Date</code> set to the earliest time for the <code>Trigger</code> * to start firing. * @param endTime * A <code>Date</code> set to the time for the <code>Trigger</code> * to quit repeat firing. * @param cronExpression * A cron expression dictating the firing sequence of the <code>Trigger</code> * @param timeZone * Specifies for which time zone the <code>cronExpression</code> * should be interprted, i.e. the expression 0 0 10 * * ?, is * resolved to 10:00 am in this time zone. * @throws ParseException * if the <code>cronExpression</code> is invalid. */ public CronTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, String cronExpression, TimeZone timeZone) throws ParseException { super(name, group, jobName, jobGroup); setCronExpression(cronExpression); if (startTime == null) { startTime = new Date(); } setStartTime(startTime); if (endTime != null) { setEndTime(endTime); } if (timeZone == null) { setTimeZone(TimeZone.getDefault()); } else { setTimeZone(timeZone); } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Interface. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ public Object clone() { CronTrigger copy = (CronTrigger) super.clone(); copy.setCronExpression((CronExpression)cronEx.clone()); return copy; } public void setCronExpression(String cronExpression) throws ParseException { this.cronEx = new CronExpression(cronExpression); this.cronEx.setTimeZone(getTimeZone()); } public String getCronExpression() { return cronEx == null ? null : cronEx.getCronExpression(); } public void setCronExpression(CronExpression cronExpression) { this.cronEx = cronExpression; this.timeZone = cronExpression.getTimeZone(); } /** * <p> * Get the time at which the <code>CronTrigger</code> should occur. * </p> */ public Date getStartTime() { return this.startTime; } public void setStartTime(Date startTime) { if (startTime == null) { throw new IllegalArgumentException("Start time cannot be null"); } Date eTime = getEndTime(); if (eTime != null && startTime != null && eTime.before(startTime)) { throw new IllegalArgumentException( "End time cannot be before start time"); } // round off millisecond... // Note timeZone is not needed here as parameter for // Calendar.getInstance(), // since time zone is implicit when using a Date in the setTime method. Calendar cl = Calendar.getInstance(); cl.setTime(startTime); cl.set(Calendar.MILLISECOND, 0); this.startTime = cl.getTime(); } /** * <p> * Get the time at which the <code>CronTrigger</code> should quit * repeating - even if repeastCount isn't yet satisfied. * </p> * * @see #getFinalFireTime() */ public Date getEndTime() { return this.endTime; } public void setEndTime(Date endTime) { Date sTime = getStartTime(); if (sTime != null && endTime != null && sTime.after(endTime)) { throw new IllegalArgumentException( "End time cannot be before start time"); } this.endTime = endTime; } /** * <p> * Returns the next time at which the <code>CronTrigger</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 Date getNextFireTime() { return this.nextFireTime; } /** * <p> * Returns the previous time at which the <code>CronTrigger</code> will * fire. If the trigger has not yet fired, <code>null</code> will be * returned. */ public Date getPreviousFireTime() { return this.previousFireTime; } /** * <p> * Sets the next time at which the <code>CronTrigger</code> will fire. * <b>This method should not be invoked by client code.</b> * </p> */ public void setNextFireTime(Date nextFireTime) { this.nextFireTime = nextFireTime; } /** * <p> * Set the previous time at which the <code>CronTrigger</code> fired. * </p> * * <p> * <b>This method should not be invoked by client code.</b> * </p> */ public void setPreviousFireTime(Date previousFireTime) { this.previousFireTime = previousFireTime; } /** * <p> * Returns the time zone for which the <code>cronExpression</code> of * this <code>CronTrigger</code> will be resolved. * </p> */ public TimeZone getTimeZone() { if(cronEx != null) { return cronEx.getTimeZone(); } if (timeZone == null) { timeZone = TimeZone.getDefault(); } return timeZone; } /** * <p> * Sets the time zone for which the <code>cronExpression</code> of this * <code>CronTrigger</code> will be resolved. * </p> */ public void setTimeZone(TimeZone timeZone) { if(cronEx != null) { cronEx.setTimeZone(timeZone); } this.timeZone = timeZone; } /** * <p> * Returns the next time at which the <code>CronTrigger</code> will fire, * after the given time. If the trigger will not fire after the given time, * <code>null</code> will be returned. * </p> * * <p> * Note that the date returned is NOT validated against the related * org.quartz.Calendar (if any) * </p> */ public Date getFireTimeAfter(Date afterTime) { if (afterTime == null) { afterTime = new Date(); } if (getStartTime().after(afterTime)) { afterTime = new Date(getStartTime().getTime() - 1000l); } if (getEndTime() != null && (afterTime.compareTo(getEndTime()) >= 0)) { return null; } Date pot = getTimeAfter(afterTime); if (getEndTime() != null && pot != null && pot.after(getEndTime())) { return null; } return pot; } /** * <p> * NOT YET IMPLEMENTED: Returns the final time at which the * <code>CronTrigger</code> will fire. * </p> * * <p> * Note that the return time *may* be in the past. and the date returned is * not validated against org.quartz.calendar * </p> */ public Date getFinalFireTime() { Date resultTime; if (getEndTime() != null) { resultTime = getTimeBefore(new Date(getEndTime().getTime() + 1000l)); } else { resultTime = (cronEx == null) ? null : cronEx.getFinalFireTime(); } if ((resultTime != null) && (getStartTime() != null) && (resultTime.before(getStartTime()))) { return null; } return resultTime; } /** * <p> * Determines whether or not the <code>CronTrigger</code> will occur * again. * </p> */ public boolean mayFireAgain() { return (getNextFireTime() != null); } protected boolean validateMisfireInstruction(int misfireInstruction) { if (misfireInstruction < MISFIRE_INSTRUCTION_SMART_POLICY) { return false; } if (misfireInstruction > MISFIRE_INSTRUCTION_DO_NOTHING) { return false; } return true; } /** * <p> * Updates the <code>CronTrigger</code>'s state based on the * MISFIRE_INSTRUCTION_XXX that was selected when the <code>CronTrigger</code> * was created. * </p> * * <p> * If the misfire instruction is set to MISFIRE_INSTRUCTION_SMART_POLICY, * then the following scheme will be used: <br> * <ul> * <li>The instruction will be interpreted as <code>MISFIRE_INSTRUCTION_FIRE_ONCE_NOW</code> * </ul>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -