📄 crontrigger.java
字号:
* </p>
*/
public CronTrigger(String name, String group, String jobName,
String jobGroup, String cronExpression, TimeZone timeZone)
throws ParseException {
this(name, group, jobName, jobGroup, null, null, cronExpression,
timeZone);
}
/**
* <p>
* Create a <code>CronTrigger</code> that will occur at the given time,
* until the given end time.
* </p>
*
* <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>SimpleTrigger</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 (startTime.after(afterTime))
afterTime = new Date(startTime.getTime() - 1000l);
Date pot = getTimeAfter(afterTime);
if (endTime != null && pot != null && pot.after(endTime)) return null;
return pot;
}
/**
* <p>
* 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() {
if (this.endTime != null) return getTimeBefore(this.endTime);
else
return null;
}
/**
* <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>SimpleTrigger</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>
* </p>
*/
public void updateAfterMisfire(org.quartz.Calendar cal) {
int instr = getMisfireInstruction();
if (instr == MISFIRE_INSTRUCTION_SMART_POLICY)
instr = MISFIRE_INSTRUCTION_FIRE_ONCE_NOW;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -