Welcome 微信登录

首页 / 操作系统 / Linux / Quartz框架 实现任务调度

1.任务Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在 JobDataMap实例中;2.触发器Trigger:是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;3.调度器JobDetail:Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。创建一个Quartz工作1.计划实体类/****计划实体类*/public class Plan {private String date;private String task;public Plan(String date, String task) {this.date = date;this.task = task;}public Plan() {}@Overridepublic String toString() {return "Plan [date=" + date + ", task=" + task + "]";}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getTask() {return task;}public void setTask(String task) {this.task = task;}}2.提醒服务类/** ** @提醒服务类 * */public class RemindService {//数据查询public List<Plan> getPlansForToday(){List<Plan> list=new ArrayList<Plan>();Plan p1=new Plan("2016-11-3","呵呵");Plan p2=new Plan("2016-11-4","嘿嘿");list.add(p1);list.add(p2);return list;}//提醒服务类public void ouputPlan(){List<Plan> forToday = getPlansForToday();for (Plan plan : forToday) {System.out.println("计划时间"+plan.getDate()+"计划内容"+plan.getTask());}}}3.提醒任务类/** ** @提醒任务类 * */public class RemindJob implements Job {private RemindService service=new RemindService();public void execute(JobExecutionContext arg0) throws JobExecutionException {service.getPlansForToday();}public RemindService getService() {return service;}public void setService(RemindService service) {this.service = service;}}4.调度定时器任务public class TestJob {public static void doRemind() throws SchedulerException, InterruptedException{//创建一个任务JobDetail job =JobBuilder.newJob(RemindJob.class).withIdentity("job1", "group1").build();//创建一个触发器/*Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(TriggerKey.triggerKey("myTrigger", "myTriggerGroup")).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(2)).startAt(new Date(System.currentTimeMillis()+2000)).build();*/Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 34 16 ? * 5#1 2016")).build();SchedulerFactory s=new StdSchedulerFactory();Scheduler scheduler = s.getScheduler();//注册并进行调度scheduler.scheduleJob(job,trigger);//启动调度scheduler.start();//睡眠10s//Thread.sleep(10000);//关闭调度//scheduler.shutdown();}public static void main(String[] args) throws SchedulerException, InterruptedException {doRemind();}}Cron表达式本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136778.htm