Quartz的使用案例

一.介紹

項目中的調度任務可使用Quartz任務調度框架 java

一、Job接口:這個接口裏面只定義了一個方法,excute框架

void execute(JobExecutionContext context)  

 

而後定義一個類實現該接口,就能夠定義本身須要執行的任務了,JobExecutionContext類提供調度上下文的各類信息ide

二、JobDetail:用於描敘Job實現類及其餘的一些靜態信息測試

三、Trigger:描敘觸發Job執行的時間觸發規則ui

四、Scheduler:運行容器,使用SchedulerFactory建立Scheduler實例url

二.測試代碼

1.測試代碼一:

 Hello.javaspa

 1 import java.util.Date;
 2 
 3 import org.quartz.Job;
 4 import org.quartz.JobExecutionContext;
 5 import org.quartz.JobExecutionException;
 6 
 7 public class HelloJob implements Job {
 8     @Override
 9     public void execute(JobExecutionContext context) throws JobExecutionException {
10         System.out.println(String.format("Hello World! Time:%s", new Date()));
11     }
12 }

 

  HelloWorldDeamo.java日誌

 1 import org.quartz.JobBuilder;
 2 import org.quartz.JobDetail;
 3 import org.quartz.Scheduler;
 4 import org.quartz.SchedulerFactory;
 5 import org.quartz.SimpleScheduleBuilder;
 6 import org.quartz.Trigger;
 7 import org.quartz.TriggerBuilder;
 8 import org.quartz.impl.StdSchedulerFactory;
 9 
10 public class HelloWorldDemo {
11 
12     public static void main(String[] args) {
13         try {
14             // 經過schedulerFactory獲取一個調度器
15             SchedulerFactory schedulerfactory = new StdSchedulerFactory();
16             // 經過schedulerFactory獲取一個調度器
17             Scheduler scheduler = schedulerfactory.getScheduler();
18             // 建立jobDetail實例,綁定Job實現類
19             JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("helloJob", "jobGroup1").build();
20             // 定義調度觸發規則,本例中使用SimpleScheduleBuilder建立了一個5s執行一次的觸發器
21             Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "triggerGroup1").startNow()
22                     .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
23                     .build();
24             // 把做業和觸發器註冊到任務調度中
25             scheduler.scheduleJob(jobDetail, trigger);
26             // 啓動調度
27             scheduler.start();
28             // 60s後關閉
29             Thread.sleep(1000 * 30);
30             scheduler.shutdown();
31             System.out.println("調度任務結束");
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35     }
36 }

 

2.另一個程序(定義觸發器和得到調取器和上面有所不一樣):

 1 import org.quartz.CronTrigger;
 2 import org.quartz.JobDetail;
 3 import org.quartz.Scheduler;
 4 import org.quartz.Trigger;
 5 import org.quartz.impl.StdSchedulerFactory;
 6 
 7 /**
 8  * 負責url調度
 9  * 天天凌晨向url倉庫中添加入口url
10  */
11 public class UrlManager {
12     public static void main(String[] args){
13         try{
14             //獲取默認調度器
15             Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
16             //開啓調度器
17             defaultScheduler.start();
18             //任務  
19             JobDetail jobDetail = new JobDetail("url_job",Scheduler.DEFAULT_GROUP,UrlJob.class);
20             //觸發時間 凌晨一點   前三個參數是 秒 分 時
21             Trigger trigger = new CronTrigger("url_job", Scheduler.DEFAULT_GROUP,"0 0 1 * * ?");
22             //添加調度任務和觸發時間
23             defaultScheduler.scheduleJob(jobDetail,trigger);
24             
25         }catch (Exception e){
26             e.printStackTrace();
27         }
28     }
29 }

 

 3.測試代碼二(對調度封裝)

 QuartzUtil.javacode

 1 import org.quartz.Job;
 2 import org.quartz.JobBuilder;
 3 import org.quartz.JobDetail;
 4 import org.quartz.Scheduler;
 5 import org.quartz.SchedulerException;
 6 import org.quartz.SchedulerFactory;
 7 import org.quartz.SimpleScheduleBuilder;
 8 import org.quartz.Trigger;
 9 import org.quartz.TriggerBuilder;
10 import org.quartz.impl.StdSchedulerFactory;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13 
14 /**
15  * 任務調度公共類
16  */
17 public class QuartzUtil {
18 
19     private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任務組
20     private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//觸發器組
21     private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日誌
22 
23     /**
24      * 添加任務的方法
25      * @param jobName  任務名
26      * @param triggerName  觸發器名
27      * @param jobClass  執行任務的類
28      * @param seconds  間隔時間
29      * @throws SchedulerException
30      */
31     public static void addJob(String jobName,String triggerName,Class<? extends Job> jobClass,int seconds) throws SchedulerException{
32         log.info("==================initialization=================");
33         //建立一個SchedulerFactory工廠實例
34         SchedulerFactory sf = new StdSchedulerFactory();
35         //經過SchedulerFactory構建Scheduler對象 
36         Scheduler sche = sf.getScheduler();
37         log.info("===================initialize finshed===================");
38 
39         log.info("==============add the Job to Scheduler==================");  
40 
41         //用於描敘Job實現類及其餘的一些靜態信息,構建一個做業實例
42         JobDetail jobDetail = JobBuilder.newJob(jobClass)
43                                 .withIdentity(jobName, JOB_GROUP_NAME)
44                                 .build();
45         //構建一個觸發器,規定觸發的規則
46         Trigger trigger = TriggerBuilder.newTrigger()//建立一個新的TriggerBuilder來規範一個觸發器
47                             .withIdentity(triggerName, TRIGGER_GROUP_NAME)//給觸發器起一個名字和組名
48                             .startNow()//當即執行
49                             .withSchedule(
50                                 SimpleScheduleBuilder.simpleSchedule()
51                                 .withIntervalInSeconds(seconds)//時間間隔  單位:秒
52                                 .repeatForever()//一直執行
53                             )
54                             .build();//產生觸發器
55         //向Scheduler中添加job任務和trigger觸發器
56         sche.scheduleJob(jobDetail, trigger);
57         //啓動
58         sche.start();
59     }
60 
61     /**
62      * 測試
63      * @param args
64      */
65     public static void main(String[] args) {
66         try {
67             //添加第一個任務  每隔10秒執行一次
68             QuartzUtil.addJob("job1", "trigger1", TestJobOne.class, 2);
69 
70             //添加第二個任務  每隔20秒執行一次
71             QuartzUtil.addJob("Job2", "trigger2", TestJobTwo.class, 5);
72         } catch (SchedulerException e) {
73             e.printStackTrace();
74         }
75     }
76 }

 

TestJobOne.java orm

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 實際執行任務的業務類,須要實現Job接口
 */
public class TestJobOne implements Job {
    /**
     * 執行任務的方法
     */
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("================執行任務一....");
        //do more...這裏能夠執行其餘須要執行的任務  
    }
}

 

 TestJobTwo.java 

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 實際執行任務的業務類,須要實現Job接口
 */
public class TestJobTwo implements Job {
    /**
     * 執行任務的方法
     */
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("================執行任務二....");
        //do more...這裏能夠執行其餘須要執行的任務  
    }

}
相關文章
相關標籤/搜索