歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Quartz實現任務調度

Quartz實現任務調度

日期:2017/3/1 9:07:53   编辑:Linux編程

Quartz框架核心概念

  Quartz對任務調度進行了高度抽象,提出了3個核心概念,並在org.quartz包中通過接口和類進行了描述。

  任務:就是執行的工作內容。Quartz提供Job接口來支持任務定義

  觸發器:定義觸發Job執行的時間觸發規則。Quartz提供Trigger類及其子類支持觸發器功能,

  調度器:Quartz提供了Scheduler接口,將工作任務和觸發器綁定,保證任務可以在正確的時間執行

Quartz框架的使用流程

  在系統中,對員工張三的工作任務進行提醒,實現每3秒鐘進行一次任務提醒,定時器在10秒鐘後關閉。

案例流程如下:

  1.引入jar包

  

  2.創建實體類

  

  3.創建service

public class RemindService {

    
    //創建集合,書寫內容
    public List<Plan> getPlayToday(){
        
        List<Plan> list=new ArrayList<Plan>();
        
        Plan plan1=new Plan("12月17日", "快回家了!!!");
        Plan plan2=new Plan("12月18日", "這是真的!!!");
        
        list.add(plan1);
        list.add(plan2);
        
        return list;
    }
    
    //打印計劃的時間與內容
    public void plintMessage(){
        List<Plan> list=getPlayToday();
        for (Plan plan : list) {
            System.out.println("計劃的時間:"+plan.getDate()+"計劃的內容:"+plan.getTask());
        }
        
    }
    
    
}

  4.創建quartz

public class RemindJob implements Job {

    //植入service
    private RemindService service = new RemindService();
    
    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        service.plintMessage();
    }

    
    public RemindService getService() {
        return service;
    }

    public void setService(RemindService service) {
        this.service = service;
    }
    
}

  5.測試類:

public class MyQuertzTest {
    
    public static void tool() throws Exception{
        
        //創建job
        JobDetail job = JobBuilder.newJob(RemindJob.class)//
                .withIdentity("job1", "group1").build();
        
        //構建trigger
        /* CronTrigger trigger = TriggerBuilder.newTrigger().//
                 withIdentity("trigger1", "group1").//
                 withSchedule(CronScheduleBuilder.cronSchedule("0 40 18 ? * 7#3 2016"))
                 .build();  */

        Trigger trigger = TriggerBuilder.newTrigger() 
                 .withIdentity("myTrigger", "myTriggerGroup")
                 .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                     .withIntervalInSeconds(60)
                     .repeatForever())
                 .startAt(new Date(System.currentTimeMillis()))
                 .build();
        
        //創建調度者工廠
        SchedulerFactory sfc = new StdSchedulerFactory();
        //創建一個調度者
        Scheduler sched=sfc.getScheduler();    
        //注冊並進行調度
        sched.scheduleJob(job, trigger);
        sched.start();
        //Thread.sleep(3000);
        
    }
    
    public static void main(String[] args)  {
        try {
            tool();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用CronTrigger(特定時間,特定操作)

CronTrigger也是Trigger的子類

CronTriggerSimpleTrigger的對比:

CronTrigger允許用戶更精准地控制任務的運行日期和時間,而不僅僅是定義工作的頻度

CronTrigger通過Cron表達式定義准確的運行時間點。創建CronTrigger的語法如下:


Cron表達式

要使用CronTrigger,必須掌握Cron表達式

Cron表達式由6~7個由空格分隔的時間元素組成。第7個元素可選

Cron表達式有幾個特殊的字符,說明如下:

Cron表達式案例:

Spring3.2.11與Quartz2.2.1整合時內存洩漏問題解決 http://www.linuxidc.com/Linux/2015-06/119042.htm

Spring配置Quartz任務調度框架教程 http://www.linuxidc.com/Linux/2014-11/108907.htm

Quartz深入淺出 http://www.linuxidc.com/Linux/2014-09/107007.htm

Quartz1.6有狀態JOB碰到的棘手問題既解決方案 http://www.linuxidc.com/Linux/2014-09/107005.htm

Spring 3整合Quartz 2實現定時任務 http://www.linuxidc.com/Linux/2014-09/107006.htm

Java項目中定時任務之Quartz的應用 http://www.linuxidc.com/Linux/2013-12/94443.htm

Spring 3 調度器示例 —— JDK 定時器和 Quartz 展示 http://www.linuxidc.com/Linux/2013-10/91946.htm

Quartz框架 實現任務調度 http://www.linuxidc.com/Linux/2016-11/136778.htm

Spring Quartz定時任務 http://www.linuxidc.com/Linux/2016-11/137525.htm

Copyright © Linux教程網 All Rights Reserved