zoukankan      html  css  js  c++  java
  • 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() {
            
        }
        @Override
        public 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表达式

  • 相关阅读:
    英语口语交际最常用短语
    家庭英语口语800句
    C#基础概念二十五问
    英语常用日常交际用语
    系统进程总结
    虚拟键盘驱动程序
    系统程序员成长计划拥抱变化(上)
    系统程序员成长计划谁动了你的隐私(上)
    系统程序员成长计划谁动了你的隐私(下)
    系统程序员成长计划Write once, run anywhere(WORA)(上)
  • 原文地址:https://www.cnblogs.com/s1294/p/6032572.html
Copyright © 2011-2022 走看看