quartz2.3.0(二)触发器Trigger花式Scheduler调度job

任务类

 1 package org.quartz.examples.example2;
 2 
 3 import java.util.Date;
 4 
 5 import org.slf4j.Logger;
 6 import org.slf4j.LoggerFactory;
 7 import org.quartz.Job;
 8 import org.quartz.JobExecutionContext;
 9 import org.quartz.JobExecutionException;
10 import org.quartz.JobKey;
11 
12 /**
13  * 任务job
14  */
15 public class SimpleJob implements Job {
16 
17     private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class);
18 
19     // 必须要有public修饰的无参构造函数
20     public SimpleJob() {
21     }
22 
23     // 任务执行方法
24     public void execute(JobExecutionContext context) throws JobExecutionException {
25         JobKey jobKey = context.getJobDetail().getKey();  //jobKey长这样:group1.job6
26         LOG.info("执行任务。SimpleJob says: " + jobKey + " executing at " + new Date());
27     }
28 
29 }

调度管理类

  1 package org.quartz.examples.example2;
  2 
  3 import static org.quartz.DateBuilder.futureDate;
  4 import static org.quartz.JobBuilder.newJob;
  5 import static org.quartz.JobKey.jobKey;
  6 import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
  7 import static org.quartz.TriggerBuilder.newTrigger;
  8 
  9 import org.quartz.DateBuilder;
 10 import org.quartz.DateBuilder.IntervalUnit;
 11 import org.quartz.JobDetail;
 12 import org.quartz.Scheduler;
 13 import org.quartz.SchedulerException;
 14 import org.quartz.SchedulerFactory;
 15 import org.quartz.SchedulerMetaData;
 16 import org.quartz.SimpleTrigger;
 17 import org.quartz.impl.StdSchedulerFactory;
 18 import org.slf4j.Logger;
 19 import org.slf4j.LoggerFactory;
 20 
 21 import java.util.Date;
 22 
 23 /**
 24  * 这个例子表明,只要触发器运用的好,job任务可以被花式执行
 25  */
 26 public class SimpleTriggerExample {
 27     Logger LOG = LoggerFactory.getLogger(SimpleTriggerExample.class);
 28 
 29     public void run() throws Exception {
 30 
 31         // 初始化一个调度工厂,并实例化一个调度类
 32         SchedulerFactory sf = new StdSchedulerFactory();
 33         Scheduler scheduler = sf.getScheduler();
 34         // 四舍五入的日期,如果为空,则使用当前时间
 35         Date startTime = DateBuilder.nextGivenSecondDate(null, 15);
 36 
 37         // ========================================================
 38         // ============ job1 任务绑定到group1 组中 ==================
 39         // ========================================================
 40         JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build();
 41         // 实例化一个触发器,命名为trigger1,并绑定到一个名为group1的组中,Job类运行开始时间为runTime(下一分钟)
 42         SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1").startAt(startTime)
 43                 .build();
 44         Date date = scheduler.scheduleJob(job, trigger);
 45         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
 46                 + trigger.getRepeatInterval() / 1000 + " seconds");
 47 
 48         // ========================================================
 49         // ============ job2 任务绑定到group1 组中 ==================
 50         // ========================================================
 51         job = newJob(SimpleJob.class).withIdentity("job2", "group1").build();
 52         trigger = (SimpleTrigger) newTrigger().withIdentity("trigger2", "group1").startAt(startTime).build();
 53         date = scheduler.scheduleJob(job, trigger);
 54         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
 55                 + trigger.getRepeatInterval() / 1000 + " seconds");
 56 
 57         // ====================================================================
 58         // ============ job3 任务绑定到group1 组中,运行一次每间隔10秒重复1次,总共重复10次
 59         // ====================================================================
 60         job = newJob(SimpleJob.class).withIdentity("job3", "group1").build();
 61         trigger = newTrigger().withIdentity("trigger3", "group1").startAt(startTime)
 62                 .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
 63         date = scheduler.scheduleJob(job, trigger);
 64         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
 65                 + trigger.getRepeatInterval() / 1000 + " seconds");
 66         // ====================================================================
 67         // ============ job3 任务绑定到group2 组中,将被另一个触发器调度,这一次将以70秒的间隔重复两次
 68         // ====================================================================
 69         trigger = newTrigger().withIdentity("trigger3", "group2").startAt(startTime)
 70                 .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(2)).forJob(job).build();
 71 
 72         date = scheduler.scheduleJob(trigger);
 73         LOG.info(job.getKey() + " will [also] run at: " + date + " and repeat: " + trigger.getRepeatCount()
 74                 + " times, every " + trigger.getRepeatInterval() / 1000 + " seconds");
 75 
 76         // ====================================================================
 77         // ============ job4 将被执行6次,执行一次重复5次,每次间隔10秒
 78         // ====================================================================
 79         job = newJob(SimpleJob.class).withIdentity("job4", "group1").build();
 80         trigger = newTrigger().withIdentity("trigger4", "group1").startAt(startTime)
 81                 .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5)).build();
 82         date = scheduler.scheduleJob(job, trigger);
 83         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
 84                 + trigger.getRepeatInterval() / 1000 + " seconds");
 85 
 86         // ====================================================================
 87         // ============ job5 将在5分钟后执行一次
 88         // ====================================================================
 89         job = newJob(SimpleJob.class).withIdentity("job5", "group1").build();
 90         trigger = (SimpleTrigger) newTrigger().withIdentity("trigger5", "group1")
 91                 .startAt(futureDate(5, IntervalUnit.MINUTE)).build();
 92         date = scheduler.scheduleJob(job, trigger);
 93         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
 94                 + trigger.getRepeatInterval() / 1000 + " seconds");
 95 
 96         // ====================================================================
 97         // ============ job6 将被无限期地执行,每隔40秒执行一次
 98         // ====================================================================
 99         job = newJob(SimpleJob.class).withIdentity("job6", "group1").build();
100         trigger = newTrigger().withIdentity("trigger6", "group1").startAt(startTime)
101                 .withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();
102         date = scheduler.scheduleJob(job, trigger);
103         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
104                 + trigger.getRepeatInterval() / 1000 + " seconds");
105 
106         // ====================================================================
107         // ============ 启动调度器
108         // ====================================================================
109         scheduler.start();
110 
111         // ====================================================================
112         // ============ 在调度器启动之后,新增加的job7仍将可以被调度,job7将5分钟执行一次,总共重复20次
113         // ====================================================================
114         job = newJob(SimpleJob.class).withIdentity("job7", "group1").build();
115         trigger = newTrigger().withIdentity("trigger7", "group1").startAt(startTime)
116                 .withSchedule(simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20)).build();
117         date = scheduler.scheduleJob(job, trigger);
118         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
119                 + trigger.getRepeatInterval() / 1000 + " seconds");
120 
121         // ====================================================================
122         // ============ job8绑定到group1,只有定义好触发器,才会被执行
123         // ====================================================================
124         job = newJob(SimpleJob.class).withIdentity("job8", "group1").storeDurably().build();
125         scheduler.addJob(job, true); // job添加到任务调度器
126         scheduler.triggerJob(jobKey("job8", "group1")); // 手动触发job8,绑定到group1
127 
128         try {
129             Thread.sleep(30L * 1000L); // 等待30秒,让任务都执行完毕
130         } catch (Exception e) {
131         }
132 
133         // 停止调度器
134         scheduler.shutdown(true);
135 
136         // 显示调度器的一些统计信息
137         SchedulerMetaData metaData = scheduler.getMetaData();
138         LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
139 
140     }
141 
142     // 演示触发器被重新调度案例
143     private void rescheduleJobDemo() throws SchedulerException {
144         // 初始化一个调度工厂,并实例化一个调度类
145         SchedulerFactory sf = new StdSchedulerFactory();
146         Scheduler scheduler = sf.getScheduler();
147         // 四舍五入的日期,如果为空,则使用当前时间
148         Date startTime = DateBuilder.nextGivenSecondDate(null, 15);
149 
150         // ====================================================================
151         // ============ job600 将被无限期地执行,每隔5秒执行一次,由trigger2019触发
152         // ====================================================================
153         JobDetail job = newJob(SimpleJob.class).withIdentity("job600", "group1").build();
154         SimpleTrigger trigger = newTrigger().withIdentity("trigger2019", "group1").startAt(startTime)
155                 .withSchedule(simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();
156         Date date = scheduler.scheduleJob(job, trigger);
157         LOG.info(job.getKey() + " will run at: " + date + " and repeat: " + trigger.getRepeatCount() + " times, every "
158                 + trigger.getRepeatInterval() / 1000 + " seconds");
159         // ====================================================================
160         // ============ 启动调度器
161         // ====================================================================
162         scheduler.start();
163 
164         try {
165             System.out.println("线程进入睡眠");
166             Thread.sleep(10000);
167         } catch (InterruptedException e) {
168             e.printStackTrace();
169         }
170         System.out.println("线程被唤醒");
171         // ====================================================================
172         // ============ job600 被重新定义的trigger2019触发器重新调度,改为每1秒钟执行一次
173         // ====================================================================
174         SimpleTrigger trigger2 = newTrigger().withIdentity("trigger2019", "group1").startAt(startTime)
175                 .withSchedule(simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();
176         Date date2 = scheduler.rescheduleJob(trigger2.getKey(), trigger2);
177         LOG.info("job600 rescheduled to run at: " + date2);
178     }
179 
180     public static void main(String[] args) throws Exception {
181         SimpleTriggerExample example = new SimpleTriggerExample();
182         example.run();
183         example.rescheduleJobDemo(); //重新调度案例
184     }
185 
186 }

猜你喜欢

转载自www.cnblogs.com/zhuwenjoyce/p/11074433.html