Package org.quartz

Interface Scheduler

  • All Known Implementing Classes:
    JBoss4RMIRemoteMBeanScheduler, RemoteMBeanScheduler, RemoteScheduler, StdScheduler

    public interface Scheduler
    This is the main interface of a Quartz Scheduler.

    A Scheduler maintains a registry of JobDetails and Triggers. Once registered, the Scheduler is responsible for executing Job s when their associated Trigger s fire (when their scheduled time arrives).

    Scheduler instances are produced by a SchedulerFactory. A scheduler that has already been created/initialized can be found and used through the same factory that produced it. After a Scheduler has been created, it is in "stand-by" mode, and must have its start() method called before it will fire any Jobs.

    Job s are to be created by the 'client program', by defining a class that implements the Job interface. JobDetail objects are then created (also by the client) to define a individual instances of the Job. JobDetail instances can then be registered with the Scheduler via the scheduleJob(JobDetail, Trigger) or addJob(JobDetail, boolean) method.

    Trigger s can then be defined to fire individual Job instances based on given schedules. SimpleTrigger s are most useful for one-time firings, or firing at an exact moment in time, with N repeats with a given delay between them. CronTrigger s allow scheduling based on time of day, day of week, day of month, and month of year.

    Job s and Trigger s have a name and group associated with them, which should uniquely identify them within a single Scheduler. The 'group' feature may be useful for creating logical groupings or categorizations of Jobs s and Triggerss. If you don't have need for assigning a group to a given Jobs of Triggers, then you can use the DEFAULT_GROUP constant defined on this interface.

    Stored Job s can also be 'manually' triggered through the use of the triggerJob(String jobName, String jobGroup) function.

    Client programs may also be interested in the 'listener' interfaces that are available from Quartz. The JobListener interface provides notifications of Job executions. The TriggerListener interface provides notifications of Trigger firings. The SchedulerListener interface provides notifications of Scheduler events and errors. Listeners can be associated with local schedulers through the ListenerManager interface.

    The setup/configuration of a Scheduler instance is very customizable. Please consult the documentation distributed with Quartz.

    Author:
    James House, Sharada Jambula
    See Also:
    Job, JobDetail, JobBuilder, Trigger, TriggerBuilder, JobListener, TriggerListener, SchedulerListener
    • Field Detail

      • DEFAULT_GROUP

        static final java.lang.String DEFAULT_GROUP
        A (possibly) useful constant that can be used for specifying the group that Job and Trigger instances belong to.
        See Also:
        Constant Field Values
      • DEFAULT_RECOVERY_GROUP

        static final java.lang.String DEFAULT_RECOVERY_GROUP
        A constant Trigger group name used internally by the scheduler - clients should not use the value of this constant ("RECOVERING_JOBS") for the name of a Trigger's group.
        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
      • DEFAULT_FAIL_OVER_GROUP

        static final java.lang.String DEFAULT_FAIL_OVER_GROUP
        A constant Trigger group name used internally by the scheduler - clients should not use the value of this constant ("FAILED_OVER_JOBS") for the name of a Trigger's group.
        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
      • FAILED_JOB_ORIGINAL_TRIGGER_NAME

        static final java.lang.String FAILED_JOB_ORIGINAL_TRIGGER_NAME
        A constant JobDataMap key that can be used to retrieve the name of the original Trigger from a recovery trigger's data map in the case of a job recovering after a failed scheduler instance.
        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
      • FAILED_JOB_ORIGINAL_TRIGGER_GROUP

        static final java.lang.String FAILED_JOB_ORIGINAL_TRIGGER_GROUP
        A constant JobDataMap key that can be used to retrieve the group of the original Trigger from a recovery trigger's data map in the case of a job recovering after a failed scheduler instance.
        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
      • FAILED_JOB_ORIGINAL_TRIGGER_FIRETIME_IN_MILLISECONDS

        static final java.lang.String FAILED_JOB_ORIGINAL_TRIGGER_FIRETIME_IN_MILLISECONDS
        A constant JobDataMap key that can be used to retrieve the fire time of the original Trigger from a recovery trigger's data map in the case of a job recovering after a failed scheduler instance.

        Note that this is the time the original firing actually occurred, which may be different from the scheduled fire time - as a trigger doesn't always fire exactly on time.

        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
      • FAILED_JOB_ORIGINAL_TRIGGER_SCHEDULED_FIRETIME_IN_MILLISECONDS

        static final java.lang.String FAILED_JOB_ORIGINAL_TRIGGER_SCHEDULED_FIRETIME_IN_MILLISECONDS
        A constant JobDataMap key that can be used to retrieve the scheduled fire time of the original Trigger from a recovery trigger's data map in the case of a job recovering after a failed scheduler instance.

        Note that this is the time the original firing was scheduled for, which may be different from the actual firing time - as a trigger doesn't always fire exactly on time.

        See Also:
        JobDetail.requestsRecovery(), Constant Field Values
    • Method Detail

      • start

        void start()
            throws SchedulerException
        Starts the Scheduler's threads that fire Triggers. When a scheduler is first created it is in "stand-by" mode, and will not fire triggers. The scheduler can also be put into stand-by mode by calling the standby() method.

        The misfire/recovery process will be started, if it is the initial call to this method on this scheduler instance.

        Throws:
        SchedulerException - if shutdown() has been called, or there is an error within the Scheduler.
        See Also:
        startDelayed(int), standby(), shutdown()
      • startDelayed

        void startDelayed​(int seconds)
                   throws SchedulerException
        Calls {#start()} after the indicated number of seconds. (This call does not block). This can be useful within applications that have initializers that create the scheduler immediately, before the resources needed by the executing jobs have been fully initialized.
        Throws:
        SchedulerException - if shutdown() has been called, or there is an error within the Scheduler.
        See Also:
        start(), standby(), shutdown()
      • standby

        void standby()
              throws SchedulerException
        Temporarily halts the Scheduler's firing of Triggers.

        When start() is called (to bring the scheduler out of stand-by mode), trigger misfire instructions will NOT be applied during the execution of the start() method - any misfires will be detected immediately afterward (by the JobStore's normal process).

        The scheduler is not destroyed, and can be re-started at any time.

        Throws:
        SchedulerException
        See Also:
        start(), pauseAll()
      • shutdown

        void shutdown​(boolean waitForJobsToComplete)
               throws SchedulerException
        Halts the Scheduler's firing of Triggers, and cleans up all resources associated with the Scheduler.

        The scheduler cannot be re-started.

        Parameters:
        waitForJobsToComplete - if true the scheduler will not allow this method to return until all currently executing jobs have completed.
        Throws:
        SchedulerException
        See Also:
        shutdown()
      • getMetaData

        SchedulerMetaData getMetaData()
                               throws SchedulerException
        Get a SchedulerMetaData object describing the settings and capabilities of the scheduler instance.

        Note that the data returned is an 'instantaneous' snap-shot, and that as soon as it's returned, the meta data values may be different.

        Throws:
        SchedulerException
      • getCurrentlyExecutingJobs

        java.util.List<JobExecutionContext> getCurrentlyExecutingJobs()
                                                               throws SchedulerException
        Return a list of JobExecutionContext objects that represent all currently executing Jobs in this Scheduler instance.

        This method is not cluster aware. That is, it will only return Jobs currently executing in this Scheduler instance, not across the entire cluster.

        Note that the list returned is an 'instantaneous' snap-shot, and that as soon as it's returned, the true list of executing jobs may be different. Also please read the doc associated with JobExecutionContext- especially if you're using RMI.

        Throws:
        SchedulerException
        See Also:
        JobExecutionContext
      • setJobFactory

        void setJobFactory​(JobFactory factory)
                    throws SchedulerException
        Set the JobFactory that will be responsible for producing instances of Job classes.

        JobFactories may be of use to those wishing to have their application produce Job instances via some special mechanism, such as to give the opportunity for dependency injection.

        Throws:
        SchedulerException
        See Also:
        JobFactory
      • scheduleJob

        java.util.Date scheduleJob​(JobDetail jobDetail,
                                   Trigger trigger)
                            throws SchedulerException
        Add the given JobDetail to the Scheduler, and associate the given Trigger with it.

        If the given Trigger does not reference any Job, then it will be set to reference the Job passed with it into this method.

        Throws:
        SchedulerException - if the Job or Trigger cannot be added to the Scheduler, or there is an internal Scheduler error.
      • scheduleJob

        java.util.Date scheduleJob​(Trigger trigger)
                            throws SchedulerException
        Schedule the given Trigger with the Job identified by the Trigger's settings.
        Throws:
        SchedulerException - if the indicated Job does not exist, or the Trigger cannot be added to the Scheduler, or there is an internal Scheduler error.
      • scheduleJobs

        void scheduleJobs​(java.util.Map<JobDetail,​java.util.Set<? extends Trigger>> triggersAndJobs,
                          boolean replace)
                   throws SchedulerException
        Schedule all of the given jobs with the related set of triggers.

        If any of the given jobs or triggers already exist (or more specifically, if the keys are not unique) and the replace parameter is not set to true then an exception will be thrown.

        Throws:
        ObjectAlreadyExistsException - if the job/trigger keys are not unique and the replace flag is not set to true.
        SchedulerException
      • scheduleJob

        void scheduleJob​(JobDetail jobDetail,
                         java.util.Set<? extends Trigger> triggersForJob,
                         boolean replace)
                  throws SchedulerException
        Schedule the given job with the related set of triggers.

        If any of the given job or triggers already exist (or more specifically, if the keys are not unique) and the replace parameter is not set to true then an exception will be thrown.

        Throws:
        ObjectAlreadyExistsException - if the job/trigger keys are not unique and the replace flag is not set to true.
        SchedulerException
      • unscheduleJob

        boolean unscheduleJob​(TriggerKey triggerKey)
                       throws SchedulerException
        Remove the indicated Trigger from the scheduler.

        If the related job does not have any other triggers, and the job is not durable, then the job will also be deleted.

        Throws:
        SchedulerException
      • unscheduleJobs

        boolean unscheduleJobs​(java.util.List<TriggerKey> triggerKeys)
                        throws SchedulerException
        Remove all of the indicated Triggers from the scheduler.

        If the related job does not have any other triggers, and the job is not durable, then the job will also be deleted.

        Note that while this bulk operation is likely more efficient than invoking unscheduleJob(TriggerKey triggerKey) several times, it may have the adverse affect of holding data locks for a single long duration of time (rather than lots of small durations of time).

        Throws:
        SchedulerException
      • rescheduleJob

        java.util.Date rescheduleJob​(TriggerKey triggerKey,
                                     Trigger newTrigger)
                              throws SchedulerException
        Remove (delete) the Trigger with the given key, and store the new given one - which must be associated with the same job (the new trigger must have the job name and group specified) - however, the new trigger need not have the same name as the old trigger.
        Parameters:
        triggerKey - identity of the trigger to replace
        newTrigger - The new Trigger to be stored.
        Returns:
        null if a Trigger with the given name and group was not found and removed from the store (and the new trigger is therefore not stored), otherwise the first fire time of the newly scheduled trigger is returned.
        Throws:
        SchedulerException
      • addJob

        void addJob​(JobDetail jobDetail,
                    boolean replace)
             throws SchedulerException
        Add the given Job to the Scheduler - with no associated Trigger. The Job will be 'dormant' until it is scheduled with a Trigger, or Scheduler.triggerJob() is called for it.

        The Job must by definition be 'durable', if it is not, SchedulerException will be thrown.

        Throws:
        SchedulerException - if there is an internal Scheduler error, or if the Job is not durable, or a Job with the same name already exists, and replace is false.
        See Also:
        addJob(JobDetail, boolean, boolean)
      • addJob

        void addJob​(JobDetail jobDetail,
                    boolean replace,
                    boolean storeNonDurableWhileAwaitingScheduling)
             throws SchedulerException
        Add the given Job to the Scheduler - with no associated Trigger. The Job will be 'dormant' until it is scheduled with a Trigger, or Scheduler.triggerJob() is called for it.

        With the storeNonDurableWhileAwaitingScheduling parameter set to true, a non-durable job can be stored. Once it is scheduled, it will resume normal non-durable behavior (i.e. be deleted once there are no remaining associated triggers).

        Throws:
        SchedulerException - if there is an internal Scheduler error, or if the Job is not durable, or a Job with the same name already exists, and replace is false.
      • deleteJob

        boolean deleteJob​(JobKey jobKey)
                   throws SchedulerException
        Delete the identified Job from the Scheduler - and any associated Triggers.
        Returns:
        true if the Job was found and deleted.
        Throws:
        SchedulerException - if there is an internal Scheduler error.
      • deleteJobs

        boolean deleteJobs​(java.util.List<JobKey> jobKeys)
                    throws SchedulerException
        Delete the identified Jobs from the Scheduler - and any associated Triggers.

        Note that while this bulk operation is likely more efficient than invoking deleteJob(JobKey jobKey) several times, it may have the adverse affect of holding data locks for a single long duration of time (rather than lots of small durations of time).

        Returns:
        true if all of the Jobs were found and deleted, false if one or more were not deleted.
        Throws:
        SchedulerException - if there is an internal Scheduler error.
      • pauseJobs

        void pauseJobs​(GroupMatcher<JobKey> matcher)
                throws SchedulerException
        Pause all of the JobDetails in the matching groups - by pausing all of their Triggers.

        The Scheduler will "remember" the groups paused, and impose the pause on any new jobs that are added to any of those groups until it is resumed.

        NOTE: There is a limitation that only exactly matched groups can be remembered as paused. For example, if there are pre-existing job in groups "aaa" and "bbb" and a matcher is given to pause groups that start with "a" then the group "aaa" will be remembered as paused and any subsequently added jobs in group "aaa" will be paused, however if a job is added to group "axx" it will not be paused, as "axx" wasn't known at the time the "group starts with a" matcher was applied. HOWEVER, if there are pre-existing groups "aaa" and "bbb" and a matcher is given to pause the group "axx" (with a group equals matcher) then no jobs will be paused, but it will be remembered that group "axx" is paused and later when a job is added in that group, it will become paused.

        Parameters:
        matcher - The matcher to evaluate against know groups
        Throws:
        SchedulerException - On error
        See Also:
        resumeJobs(org.quartz.impl.matchers.GroupMatcher)
      • pauseTriggers

        void pauseTriggers​(GroupMatcher<TriggerKey> matcher)
                    throws SchedulerException
        Pause all of the Triggers in the groups matching.

        The Scheduler will "remember" all the groups paused, and impose the pause on any new triggers that are added to any of those groups until it is resumed.

        NOTE: There is a limitation that only exactly matched groups can be remembered as paused. For example, if there are pre-existing triggers in groups "aaa" and "bbb" and a matcher is given to pause groups that start with "a" then the group "aaa" will be remembered as paused and any subsequently added triggers in that group be paused, however if a trigger is added to group "axx" it will not be paused, as "axx" wasn't known at the time the "group starts with a" matcher was applied. HOWEVER, if there are pre-existing groups "aaa" and "bbb" and a matcher is given to pause the group "axx" (with a group equals matcher) then no triggers will be paused, but it will be remembered that group "axx" is paused and later when a trigger is added in that group, it will become paused.

        Parameters:
        matcher - The matcher to evaluate against know groups
        Throws:
        SchedulerException
        See Also:
        resumeTriggers(org.quartz.impl.matchers.GroupMatcher)
      • resumeAll

        void resumeAll()
                throws SchedulerException
        Resume (un-pause) all triggers - similar to calling resumeTriggerGroup(group) on every group.

        If any Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

        Throws:
        SchedulerException
        See Also:
        pauseAll()
      • addCalendar

        void addCalendar​(java.lang.String calName,
                         Calendar calendar,
                         boolean replace,
                         boolean updateTriggers)
                  throws SchedulerException
        Add (register) the given Calendar to the Scheduler.
        Parameters:
        updateTriggers - whether or not to update existing triggers that referenced the already existing calendar so that they are 'correct' based on the new trigger.
        Throws:
        SchedulerException - if there is an internal Scheduler error, or a Calendar with the same name already exists, and replace is false.
      • deleteCalendar

        boolean deleteCalendar​(java.lang.String calName)
                        throws SchedulerException
        Delete the identified Calendar from the Scheduler.

        If removal of the Calendar would result in Triggers pointing to non-existent calendars, then a SchedulerException will be thrown.

        Returns:
        true if the Calendar was found and deleted.
        Throws:
        SchedulerException - if there is an internal Scheduler error, or one or more triggers reference the calendar
      • interrupt

        boolean interrupt​(JobKey jobKey)
                   throws UnableToInterruptJobException
        Request the interruption, within this Scheduler instance, of all currently executing instances of the identified Job, which must be an implementor of the InterruptableJob interface.

        If more than one instance of the identified job is currently executing, the InterruptableJob#interrupt() method will be called on each instance. However, there is a limitation that in the case that interrupt() on one instances throws an exception, all remaining instances (that have not yet been interrupted) will not have their interrupt() method called.

        This method is not cluster aware. That is, it will only interrupt instances of the identified InterruptableJob currently executing in this Scheduler instance, not across the entire cluster.

        Returns:
        true if at least one instance of the identified job was found and interrupted.
        Throws:
        UnableToInterruptJobException - if the job does not implement InterruptableJob, or there is an exception while interrupting the job.
        See Also:
        InterruptableJob.interrupt(), getCurrentlyExecutingJobs(), interrupt(String)
      • checkExists

        boolean checkExists​(JobKey jobKey)
                     throws SchedulerException
        Determine whether a Job with the given identifier already exists within the scheduler.
        Parameters:
        jobKey - the identifier to check for
        Returns:
        true if a Job exists with the given identifier
        Throws:
        SchedulerException
      • checkExists

        boolean checkExists​(TriggerKey triggerKey)
                     throws SchedulerException
        Determine whether a Trigger with the given identifier already exists within the scheduler.
        Parameters:
        triggerKey - the identifier to check for
        Returns:
        true if a Trigger exists with the given identifier
        Throws:
        SchedulerException