版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
Example1 第一个quartz示例
[java]
view plain
copy
public class HelloJob
implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.
class);
public HelloJob() { }
@Override public void execute(JobExecutionContext context)
throws JobExecutionException { _log.info(
"Hello World! - " +
new Date()); } }
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",
"group").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(65L * 1000L); }
catch (InterruptedException e) { e.printStackTrace(); } 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(); } }
Example2 简单触发器
[java]
view plain
copy
public class SimpleJob
implements Job {
private static Logger _log = LoggerFactory.getLogger(SimpleJob.
class);
public SimpleJob() { }
@Override public void execute(JobExecutionContext context)
throws JobExecutionException { JobKey jobKey = context.getJobDetail().getKey(); _log.info(
"SimpleJob says: " + jobKey +
" executing at " +
new Date()); } }
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() /
1000 +
" 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() /
1000 +
" seconds"); job = JobBuilder.newJob(SimpleJob.
class).withIdentity(
"job3",
"group1").build(); trigger = 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() /
1000 +
" seconds"); trigger = 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() /
1000 +
" seconds"); job = JobBuilder.newJob(SimpleJob.
class).withIdentity(
"job4",
"group1").build(); trigger = 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() /
1000 +
" seconds"); job = JobBuilder.newJob(SimpleJob.
class).withIdentity(
"job5",
"group1").build(); trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity(
"trigger5",
"group1").startAt(DateBuilder.futureDate(
5, IntervalUnit.MINUTE)).build(); ft = sched.scheduleJob(job, trigger); log.info(job.getKey() +
" will run at: " + ft +
" and repeat: " + trigger.getRepeatCount() +
" times, every " + trigger.getRepeatInterval() /
1000 +
" seconds"); job = JobBuilder.newJob(SimpleJob.
class).withIdentity(
"job6",
"group1").build(); trigger = 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() /
1000 +
" seconds"); log.info(
"------- Starting Scheduler ----------------"); sched.start(); log.info(
"------- Started Scheduler -----------------"); job = JobBuilder.newJob(SimpleJob.
class).withIdentity(
"job7",
"group1").build(); trigger = 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() /
1000 +
" 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(30L * 1000L); }
catch (Exception e) { e.printStackTrace(); } log.info(
"------- Rescheduling... --------------------"); trigger = 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(300L * 1000L); }
catch (Exception e) { e.printStackTrace(); } 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(); } }
Example 3 crontab格式的触发器
[java]
view plain
copy
public class SimpleJob
implements Job {
private static Logger _log = LoggerFactory.getLogger(SimpleJob.
class);
public SimpleJob() { }
public void execute(JobExecutionContext context)
throws JobExecutionException { JobKey jobKey = context.getJobDetail().getKey(); _log.info(
"SimpleJob says: " + jobKey +
" executing at " +
new Date()); } }
public class CronTriggerExample {
public void run()
throws Exception { Logger log = LoggerFactory.getLogger(CronTriggerExample.
class); log.info(
"------- Initializing -------------------"); SchedulerFactory sf =
new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); log.info(
"------- Initialization Complete --------"); log.info(
"------- Scheduling Jobs ----------------"); JobDetail job = newJob(SimpleJob.
class).withIdentity(
"job1",
"group1").build(); CronTrigger trigger = newTrigger().withIdentity(
"trigger1",
"group1").withSchedule(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()); job = newJob(SimpleJob.
class).withIdentity(
"job2",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger2",
"group1").withSchedule(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 = newJob(SimpleJob.
class).withIdentity(
"job3",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger3",
"group1").withSchedule(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 = newJob(SimpleJob.
class).withIdentity(
"job4",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger4",
"group1").withSchedule(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 = newJob(SimpleJob.
class).withIdentity(
"job5",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger5",
"group1").withSchedule(cronSchedule(
"0 0 10am 1,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 = newJob(SimpleJob.
class).withIdentity(
"job6",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger6",
"group1").withSchedule(cronSchedule(
"0,30 * * ? * 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 = newJob(SimpleJob.
class).withIdentity(
"job7",
"group1").build(); trigger = newTrigger().withIdentity(
"trigger7",
"group1").withSchedule(cronSchedule(
"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(300L * 1000L); }
catch (Exception e) { e.printStackTrace(); } 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(); } }
Example4 向任务传递参数
[java]
view plain
copy
@PersistJobDataAfterExecution @DisallowConcurrentExecution public class ColorJob
implements Job {
private static Logger _log = LoggerFactory.getLogger(ColorJob.
class);
public static final String FAVORITE_COLOR =
"favorite color";
public static final String EXECUTION_COUNT =
"count";
private int _counter =
1;
public ColorJob() { }
public void execute(JobExecutionContext context)
throws JobExecutionException { JobKey jobKey = context.getJobDetail().getKey(); JobDataMap data = context.getJobDetail().getJobDataMap(); String favoriteColor = data.getString(FAVORITE_COLOR);
int count = data.getInt(EXECUTION_COUNT); _log.info(
"ColorJob: " + jobKey +
" executing at " +
new Date() +
"\n" +
" favorite color is " + favoriteColor +
"\n" +
" execution count (from job map) is " + count +
"\n" +
" execution count (from job member variable) is " + _counter); count++; data.put(EXECUTION_COUNT, count); _counter++; } }
public class JobStateExample {
public void run()
throws Exception { Logger log = LoggerFactory.getLogger(JobStateExample.
class); log.info(
"------- Initializing -------------------"); SchedulerFactory sf =
new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); log.info(
"------- Initialization Complete --------"); log.info(
"------- Scheduling Jobs ----------------"); Date startTime = nextGivenSecondDate(
null,
10); JobDetail job1 = newJob(ColorJob.
class).withIdentity(
"job1",
"group1") .build(); SimpleTrigger trigger1 = newTrigger() .withIdentity(
"trigger1",
"group1").startAt(startTime) .withSchedule( simpleSchedule().withIntervalInSeconds(
10) .withRepeatCount(
4)).build(); job1.getJobDataMap().put(ColorJob.FAVORITE_COLOR,
"Green"); job1.getJobDataMap().put(ColorJob.EXECUTION_COUNT,
1); Date scheduleTime1 = sched.scheduleJob(job1, trigger1); log.info(job1.getKey() +
" will run at: " + scheduleTime1 +
" and repeat: " + trigger1.getRepeatCount() +
" times, every " + trigger1.getRepeatInterval() /
1000 +
" seconds"); JobDetail job2 = newJob(ColorJob.
class).withIdentity(
"job2",
"group1") .build(); SimpleTrigger trigger2 = newTrigger() .withIdentity(
"trigger2",
"group1").startAt(startTime) .withSchedule( simpleSchedule().withIntervalInSeconds(
10) .withRepeatCount(
4)).build(); job2.getJobDataMap().put(ColorJob.FAVORITE_COLOR,
"Red"); job2.getJobDataMap().put(ColorJob.EXECUTION_COUNT,
1); Date scheduleTime2 = sched.scheduleJob(job2, trigger2); log.info(job2.getKey().toString() +
" will run at: " + scheduleTime2 +
" and repeat: " + trigger2.getRepeatCount() +
" times, every " + trigger2.getRepeatInterval() /
1000 +
" seconds"); log.info(
"------- Starting Scheduler ----------------"); sched.start(); log.info(
"------- Started Scheduler -----------------"); log.info(
"------- Waiting 60 seconds... -------------");
try { Thread.sleep(60L * 1000L); }
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 { JobStateExample example =
new JobStateExample(); example.run(); } }
Example5 错失任务执行策略
[java]
view plain
copy
@PersistJobDataAfterExecution @DisallowConcurrentExecution public class StatefulDumbJob
implements Job {
public static final String NUM_EXECUTIONS =
"NumExecutions";
public static final String EXECUTION_DELAY =
"ExecutionDelay";
public StatefulDumbJob() { }
public void execute(JobExecutionContext context)
throws JobExecutionException { System.err.println(
"---" + context.getJobDetail().getKey() +
" executing.[" +
new Date() +
"]"); JobDataMap map = context.getJobDetail().getJobDataMap();
int executeCount =
0;
if (map.containsKey(NUM_EXECUTIONS)) { executeCount = map.getInt(NUM_EXECUTIONS); } executeCount++; map.put(NUM_EXECUTIONS, executeCount);
long delay = 5000l;
if (map.containsKey(EXECUTION_DELAY)) { delay = map.getLong(EXECUTION_DELAY); }
try { Thread.sleep(delay); }
catch (Exception ignore) { } System.err.println(
" -" + context.getJobDetail().getKey() +
" complete (" + executeCount +
")."); } }
public class MisfireExample {
public void run()
throws Exception { Logger log = LoggerFactory.getLogger(MisfireExample.
class); log.info(
"------- Initializing -------------------"); SchedulerFactory sf =
new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); log.info(
"------- Initialization Complete -----------"); log.info(
"------- Scheduling Jobs -----------"); Date startTime = nextGivenSecondDate(
null,
15); JobDetail job = newJob(StatefulDumbJob.
class).withIdentity(
"statefulJob1",
"group1").usingJobData( StatefulDumbJob.EXECUTION_DELAY, 10000L).build(); SimpleTrigger trigger = newTrigger().withIdentity(
"trigger1",
"group1") .startAt(startTime).withSchedule( simpleSchedule().withIntervalInSeconds(
3) .repeatForever()).build(); Date ft = sched.scheduleJob(job, trigger); log.info(job.getKey() +
" will run at: " + ft +
" and repeat: " + trigger.getRepeatCount() +
" times, every " + trigger.getRepeatInterval() /
1000 +
" seconds"); job = newJob(StatefulDumbJob.
class).withIdentity(
"statefulJob2",
"group1").usingJobData(StatefulDumbJob.EXECUTION_DELAY, 10000L) .build(); trigger = newTrigger().withIdentity(
"trigger2",
"group1").startAt( startTime).withSchedule( simpleSchedule().withIntervalInSeconds(
3).repeatForever() .withMisfireHandlingInstructionNowWithExistingCount()) .build(); ft = sched.scheduleJob(job, trigger); log.info(job.getKey() +
" will run at: " + ft +
" and repeat: " + trigger.getRepeatCount() +
" times, every " + trigger.getRepeatInterval() /
1000 +
" seconds"); log.info(
"------- Starting Scheduler ----------------"); sched.start(); log.info(
"------- Started Scheduler -----------------");
try { Thread.sleep(600L * 1000L); }
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 { MisfireExample example =
new MisfireExample(); example.run(); } }