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表达式

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/s1294/p/6032572.html
Copyright © 2011-2022 走看看