Early access to quartz-your own land reclamation

Source: Internet
Author: User

Today, I was despised by my colleagues. Why? Because, although the quartz expression is often configured, it has never been set up, so I have been here from the beginning to shame.

1. download files from the official website

Http://www.quartz-scheduler.org/

The current version is 2.2 quartz-2.2.0-distribution.tar.gz

2. Learn exampleexample1-your first quartz Program

package org.quartz.examples.example1;import java.util.Date;import org.quartz.DateBuilder;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleExample{  public void run() throws Exception  {    Logger log = LoggerFactory.getLogger(SimpleExample.class);    log.info("------- Initializing ----------------------");    SchedulerFactory sf = new StdSchedulerFactory();    Scheduler sched = sf.getScheduler();    log.info("------- Initialization Complete -----------");    Date runTime = DateBuilder.evenMinuteDate(new Date());    log.info("------- Scheduling Job  -------------------");    JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();    Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();    sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + runTime);    sched.start();    log.info("------- Started Scheduler -----------------");    log.info("------- Waiting 65 seconds... -------------");    try    {      Thread.sleep(65000L);    }    catch (Exception e)    {    }    log.info("------- Shutting Down ---------------------");    sched.shutdown(true);    log.info("------- Shutdown Complete -----------------");  }  public static void main(String[] args) throws Exception  {    SimpleExample example = new SimpleExample();    example.run();  }}

Initialize schedulerfactory. schedulerfactory has two implementation classes: directschedulerfactory and stdschedulerfactory.

Stdschedulerfactory

Implements the org. Quartz. schedulerfactory interface. It uses a series of attributes (Java. util. properties) to create and initialize a Z scheduler. These attributes are usually stored and loaded in a file, but they can also be created through your program and directly handed over to the factory for processing. Call getscheduler () at the factory to generate a scheduler, initialize it (there are thread pools, jobstore and data sources), and return a handle to this public interface.

Directschedulerfactory

Is another schedulerfactory implementation. It is useful when creating a scheduler in more programming methods. He is not in favor of his usage for the following reasons: 1. It requires users to know more clearly what they are doing. 2. It cannot be configured, that is, you must configure all scheduler attributes in the code.

Jobbuilder

Create a job details by using the given job name job1 and the given group name group1.

Known job types include: directoryscanjob, ejb3invokerjob, ejbinvokerjob, filescanjob, jmxinvokerjob, nativejob, noopjob, senddestinationmessagejob, sendmailjob, sendqueuemessagejob, sendtopicmessagejob

Triggerbuilder

Use trigger builder to set the task start time (next minute)

Register jobdetail and trigger to the scheduler and start the scheduler.

In this way, hellojob will be run at the specified time class

Known trigger types include: calendarintervaltrigger, coretrigger, crontrigger, dailytimeintervaltrigger, mutabletrigger, operabletrigger, simpletrigger

Simpletrigger

Supports Simple cycles and cycles.

Crontrigger

It supports more specific scheduling than simpletrigger, and is not very complex. Based on cron expressions, crontrigger supports calendar-like repetition intervals, rather than a single interval-which is a major improvement for simpletrigger.

Cron expressions include the following seven fields:

Seconds
Minute
Hours
Date in month
Month
Week date
Year (optional)

The cron trigger uses a series of special characters, as shown below:

  • The backslash (/) character indicates the increment value. For example, in the second field, "5/15" indicates that the value starts from 5th seconds, every 15 seconds.
  • Question mark (?) The characters and letters are only available in the Date Field of the month and the date field of the week. The question mark indicates that this field does not contain specific values. Therefore, if you specify a date in the month, you can insert "?" In the Date Field of the week, Indicates that the date value of the week is irrelevant. The letter L isLast. In the Date Field of the month, the task is executed on the last day of the month. In the week Date Field, if "L" exists separately, it is equal to "7". Otherwise, it represents the last instance of the week date in the current month. Therefore, "0l" indicates that it will be executed on the last Sunday of the month.
  • The letter (w) in the date field within the month is executed on the workday closest to the specified value. Place "1 W" in the Date Field of the month, which means that the execution is arranged within the first business day of the month.
  • The pound sign (#) specifies a specific workday instance for a given month. Put "Mon #2" in the Date Field of the week, indicating that the task is scheduled for the second Monday of the month.
  • The asterisk (*) character is a wildcard character, indicating that this field can accept any possible value.

All these definitions may seem a little scary, but after a few minutes of practice, the cron expression will look very simple.

Calendarintervaltrigger

Unlike simpletrigger, simpletrigger is based on seconds.

Unlike crontrigger, calendarintervaltrigger is based on calendar as the initial time, and then executed every second. The crontrigger's "0/19 ****?" It is triggered only at 00 s, 19 s and 38 s, because crontrigger completes expression-based verification rules,

Dailytimeintervaltrigger

The task is triggered based on the daily interval. The trigger can set the following interval types: seconds, minutes, and hours. In addition, you can specify the days of the week to execute the task.

Example2-simple triggers

package org.quartz.examples.example2;import java.util.Date;import org.quartz.DateBuilder;import org.quartz.DateBuilder.IntervalUnit;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobKey;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.SchedulerMetaData;import org.quartz.SimpleScheduleBuilder;import org.quartz.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleTriggerExample{  public void run()    throws Exception  {    Logger log = LoggerFactory.getLogger(SimpleTriggerExample.class);    log.info("------- Initializing -------------------");    SchedulerFactory sf = new StdSchedulerFactory();    Scheduler sched = sf.getScheduler();    log.info("------- Initialization Complete --------");    log.info("------- Scheduling Jobs ----------------");    Date startTime = DateBuilder.nextGivenSecondDate(null, 15);    JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();    SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).build();    Date ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job2", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger2", "group1").startAt(startTime).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job3", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger3", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger3", "group2").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(2)).forJob(job).build();    ft = sched.scheduleJob(trigger);    log.info(job.getKey() + " will [also] run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job4", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger4", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5)).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job5", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger5", "group1").startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.MINUTE)).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job6", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger6", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    log.info("------- Starting Scheduler ----------------");    sched.start();    log.info("------- Started Scheduler -----------------");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job7", "group1").build();    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger7", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20)).build();    ft = sched.scheduleJob(job, trigger);    log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + (trigger.getRepeatInterval() / 1000L) + " seconds");    job = JobBuilder.newJob(SimpleJob.class).withIdentity("job8", "group1").storeDurably().build();    sched.addJob(job, true);    log.info("'Manually' triggering job8...");    sched.triggerJob(JobKey.jobKey("job8", "group1"));    log.info("------- Waiting 30 seconds... --------------");    try    {      Thread.sleep(30000L);    }    catch (Exception e)    {    }    log.info("------- Rescheduling... --------------------");    trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger7", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20)).build();    ft = sched.rescheduleJob(trigger.getKey(), trigger);    log.info("job7 rescheduled to run at: " + ft);    log.info("------- Waiting five minutes... ------------");    try    {      Thread.sleep(300000L);    }    catch (Exception e)    {    }    log.info("------- Shutting Down ---------------------");    sched.shutdown(true);    log.info("------- Shutdown Complete -----------------");    SchedulerMetaData metaData = sched.getMetaData();    log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");  }  public static void main(String[] args)    throws Exception  {    SimpleTriggerExample example = new SimpleTriggerExample();    example.run();  }}

One is all

In this example, a new usage occurs. A schedule can be used without specifying a trigger. after adding a job, execute it directly. sched. addjob (job, true); and reset the job sched. reschedulejob (trigger. getkey (), trigger );

Schedulebuilder

Used for cyclic scheduling tasks. The parameters include the number of scheduling times and the interval. There are four implementation classes in total.

Simpleschedulebuilder, calendarintervalschedulebuilder, cronschedulebuilder, dailytimeintervalschedulebuilder

Example3-cron triggers

Package Org. quartz. examples. example3; import Java. util. date; import Org. quartz. cronschedulebuilder; import Org. quartz. crontrigger; import Org. quartz. jobbuilder; import Org. quartz. jobdetail; import Org. quartz. scheduler; import Org. quartz. schedulerfactory; import Org. quartz. schedulermetadata; import Org. quartz. triggerbuilder; import Org. quartz. impl. stdschedulerfactory; import Org. slf4j. logger; import Org. slf4j. l Oggerfactory; public class crontriggerexample {public void run () throws exception {logger log = loggerfactory. getlogger (crontriggerexample. class); log.info ("------- initialize -----------------"); schedulerfactory Sf = new stdschedulerfactory (); scheduler sched = SF. getscheduler (); log.info ("------- initialization completed --------"); log.info ("------- start scheduling task ----------------"); // create a simplejob jobdetail Jo of group1. B = jobbuilder. newjob (simplejob. class ). withidentity ("job1", "group1 "). build (); // create a trigger using the cron expression (triggered every minute for 0, 20, 40 seconds) crontrigger trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger1", "group1 "). withschedule (cronschedulebuilder. cronschedule ("0/20 ****? ")). Build (); Date Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); // create a job named job2 under group1 = jobbuilder. newjob (simplejob. class ). withidentity ("job2", "group1 "). build (); // trigger for creating a Cron expression = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger2", "group1 "). wit Hschedule (cronschedulebuilder. cronschedule ("15 0/2 ***? ")). Build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); job = jobbuilder. newjob (simplejob. class ). withidentity ("job3", "group1 "). build (); trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger3", "group1 "). withschedule (cronschedulebuilder. cronschedule ("0 0 /2 8-17 **? ")). Build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); job = jobbuilder. newjob (simplejob. class ). withidentity ("job4", "group1 "). build (); trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger4", "group1 "). withschedule (cronschedulebuilder. cronschedule ("0 0 /3 17-23 **? ")). Build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); job = jobbuilder. newjob (simplejob. class ). withidentity ("job5", "group1 "). build (); trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger5", "group1 "). withschedule (cronschedulebuilder. cronschedule ("0 0 10 AM, 15 *? ")). Build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); job = jobbuilder. newjob (simplejob. class ). withidentity ("job6", "group1 "). build (); trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger6", "group1 "). withschedule (cronschedulebuilder. cronschedule ("0, 3 0 **? * MON-FRI ")). build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); job = jobbuilder. newjob (simplejob. class ). withidentity ("job7", "group1 "). build (); trigger = (crontrigger) triggerbuilder. newtrigger (). withidentity ("trigger7", "group1 "). withschedule (cronschedulebuilder. cronsch Edule ("0, 30 **? * Sat, Sun ")). build (); Ft = sched. schedulejob (job, trigger); log.info (job. getkey () + "has been scheduled to run at:" + ft + "and repeat Based on expression:" + trigger. getcronexpression (); log.info ("------- starting scheduler --------------"); sched. start (); log.info ("------- started scheduler ---------------"); log.info ("------- waiting five minutes... ------------ "); try {thread. sleep (300000l);} catch (exception e) {} log.info ("------- shutting down ---------------------"); sched. shutdown (true); log.info ("------- shutdown complete -----------------"); schedulermetadata metadata = sched. getmetadata (); log.info ("executed" + metadata. getnumberofjobsexecuted () + "jobs. ");} public static void main (string [] ARGs) throws exception {crontriggerexample example = new crontriggerexample (); example. run ();}}

It mainly uses cronschedulebuilder. cronschedule ("0 0 10 am, 15 *? ") Usage of these cron expressions.

Example4-job state and job parameters

Example5-job misfires
Example6-handling job exceptions
Example7-Interrupting jobs
Example8-how to use quartz calendars
Example9-using job listeners
Example10-using quartz plug-ins
Example11-loading up quartz with dynamic jobs
Example12-remoting with quartz using RMI
Example13-clustering quartz and JDBC job stores
Example14-quartz trigger priorities
Example15-clustering quartz and Terracotta job store

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.