1.任务
任务就是执行工作的内容,Quartz提供Job接口来支持任务定义,JobDetail类是Job接口的实现类
2.触发器
在Quartz中,触发器Trigger类允许定义触发Job执行的时间触发规则,Trigger有两个实现类,分别为SimpleTrigger和CronTrigger;
SimpleTrigger主要用于固定时间间隔的调任任务,通过设置触发器的属性:开始时间,结束时间,重复次数,重复间隔等.
CronTrigger主要用于指定时间点的调度任务,通过定义Cron表达式,例: 0 0/5 15,17 * * ? 的含义是每天的15:00-16:00每5分钟运行一次,此外每天的17:00-18:00每5分钟运行一次
Cron表达式从左往右的顺序为 秒 分 时 日 月 星期 年 ,其中年可以省略
3.调度器
Quartz提供了调度器Scheduler类,它是Quartz独立运行的容器,Scheduler可以将Trigger绑定到一个JobDetail上,当Trigger被触发后,一个Job就会被执行了.
下面是简单的示例代码:
1 package cn.bd.quartz; 2 3 /** 4 * 计划实体类 5 * @author Administrator 6 * 7 */ 8 public class Plan { 9 private String date; 10 private String task; 11 12 13 public Plan(String date, String task) { 14 super(); 15 this.date = date; 16 this.task = task; 17 } 18 19 20 public String getDate() { 21 return date; 22 } 23 24 25 public void setDate(String date) { 26 this.date = date; 27 } 28 29 30 public String getTask() { 31 return task; 32 } 33 34 35 public void setTask(String task) { 36 this.task = task; 37 } 38 39 40 @Override 41 public String toString() { 42 return this.date+":"+this.task; 43 } 44 }
1 package cn.bd.quartz; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 提醒服务类 8 * @author Administrator 9 * 10 */ 11 public class RemindService { 12 private String userName; 13 public void setUserName(String userName) { 14 this.userName = userName; 15 } 16 17 public void ouputPlan(String userName){ 18 List<Plan> plansForToday=getPlansForToday(userName); 19 System.out.println(userName+"的提醒信息:\n"); 20 for(Plan plan : plansForToday){ 21 System.out.println(plan+"\n"); 22 } 23 } 24 25 private List<Plan> getPlansForToday(String userName) { 26 List<Plan> list=new ArrayList<Plan>(); 27 list.add(new Plan("2016-9-9 9:00","研讨会 | 地点 | 会议室Co1")); 28 list.add(new Plan("2016-9-9 9:00","汇报 | 地点 | 总裁办公室")); 29 return list; 30 } 31 }
1 package cn.bd.quartz; 2 3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 7 /** 8 * 提醒任务类 9 * @author Administrator 10 * 11 */ 12 public class RemindJob implements Job{ 13 public RemindJob(){ 14 } 15 private RemindService remindService; 16 17 @Override 18 public void execute(JobExecutionContext jobContext) throws JobExecutionException { 19 remindService =new RemindService(); 20 remindService.ouputPlan("张三"); 21 } 22 23 24 25 }
1 package cn.bd.quartz.test; 2 3 import java.text.ParseException; 4 import java.util.Date; 5 6 import org.quartz.CronTrigger; 7 import org.quartz.JobDetail; 8 import org.quartz.Scheduler; 9 import org.quartz.SchedulerException; 10 import org.quartz.SchedulerFactory; 11 import org.quartz.SimpleTrigger; 12 import org.quartz.impl.StdSchedulerFactory; 13 14 import cn.bd.quartz.RemindJob; 15 16 public class TestJob { 17 public void doRemind() throws SchedulerException, InterruptedException, ParseException{ 18 //创建一个任务 19 JobDetail job=new JobDetail("remindJob","group1",RemindJob.class); 20 21 //创建一个触发器 22 /*SimpleTrigger simTrig=new SimpleTrigger("trigRemindJob",SimpleTrigger.REPEAT_INDEFINITELY,3000);*/ 23 /*simTrig.setStartTime(new Date(System.currentTimeMillis()+1000));*/ 24 CronTrigger simTrig=new CronTrigger("remindJob","group1","1/3 * * * * ?"); 25 26 //创建一个调度者 27 SchedulerFactory sfc=new StdSchedulerFactory(); 28 Scheduler sched=sfc.getScheduler(); 29 //注册并进行调度 30 sched.scheduleJob(job,simTrig); 31 sched.start(); 32 Thread.sleep(10000); 33 sched.shutdown(); 34 } 35 36 public static void main(String[] args) throws SchedulerException, InterruptedException, ParseException { 37 new TestJob().doRemind(); 38 } 39 }
时间: 2024-10-19 05:48:21