歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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() {
        
    }
    @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表達式

Copyright © Linux教程網 All Rights Reserved