1. 程式人生 > >Quartz任務調度框架的簡單應用

Quartz任務調度框架的簡單應用

private tar pre detail throws sleep pro get ()

首先創建Maven項目並添加依賴

 1 <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
 2         <dependency>
 3             <groupId>org.quartz-scheduler</groupId>
 4             <artifactId>quartz</artifactId>
 5             <version>2.2.3</version>
 6
</dependency> 7 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop --> 8 <dependency> 9 <groupId>org.slf4j</groupId> 10 <artifactId>slf4j-nop</artifactId> 11 <version>1.7.7</version> 12
13 </dependency>

創建一個需要執行的任務取名為HelloJob.java

public class HelloJob implements Job {
    /*用來傳值
        private String message;
    private Float FloatJobValue;
    private Double DoubleTriggerValue;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Float getFloatJobValue() {
        return FloatJobValue;
    }

    public void setFloatJobValue(Float FloatJobValue) {
        this.FloatJobValue = FloatJobValue;
    }

    public Double getDoubleTriggerValue() {
        return DoubleTriggerValue;
    }

    public void setDoubleTriggerValue(Double DoubleTriggerValue) {
        this.DoubleTriggerValue = DoubleTriggerValue;
    }
*/ public void execute(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub // 打印當前的執行時間 try { Thread.sleep(5000L); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current Exec Time Is:" + sf.format(date)); // 編寫具體的業務邏輯 // System.out.println("Hello World"); // /* * JobKey key = context.getJobDetail().getKey(); * System.out.println("My name and group are:" + key.getName() + ":" + * key.getGroup()); TriggerKey trkey = context.getTrigger().getKey(); * System.out.println("My name and group are:" + trkey.getName() + ":" + * trkey.getGroup()); //JobDataMap dataMap = * context.getMergedJobDataMap(); //JobDataMap tdataMap = * context.getTrigger().getJobDataMap(); String Msg = * dataMap.getString("message"); Float jobFloatValue = * dataMap.getFloat("FloatJobValue"); //String triggerMsg = * dataMap.getString("message"); Double triggerDoubleValue = * dataMap.getDouble("DoubleTriggerValue"); * //System.out.println("JobMsg is:"+jobMsg); * System.out.println("jobFloatValue is:"+FloatJobValue); * System.out.println("Msg is:"+message); * System.out.println("triggerDoubleValue is:"+DoubleTriggerValue); */ // /*Trigger currentTrigger = context.getTrigger(); System.out.println("Start Time Is:" + sf.format(currentTrigger.getStartTime())); System.out.println("End Time Is:" + sf.format(currentTrigger.getEndTime())); JobKey jobKey = currentTrigger.getJobKey(); System.out.println("JobKey info---jobName:" + jobKey.getName() + "jobGroup:" + jobKey.getGroup());*/ } }

HelloScheduler.java

 1 public class HelloScheduler {
 2     public static void main(String[] args) throws SchedulerException, InterruptedException {
 3         // 打印當前的執行時間
 4         Date date = new Date();
 5         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 6         System.out.println("Current Time Is:" + sf.format(date));
 7         // 創建一個JobDetail實例,將該實例與HelloJob Class綁定
 8         JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
 9                 .withIdentity("myJob")
10                 /*.usingJobData("message", "hello myJob1")
11                 .usingJobData("FloatJobValue", 3.14F)*/
12                 .build();
13         //獲取距離當前時間4秒後的時間
14         date.setTime(date.getTime()+4000L);
15         //獲取距離當前時間6秒後的時間
16         Date endDate = new Date();
17         endDate.setTime(endDate.getTime() + 6000);
18         /*System.out.println("jobDetail‘s name:" + jobDetail.getKey().getName());
19         System.out.println("jobDetail‘s group:" + jobDetail.getKey().getGroup());
20         System.out.println("jobDetail‘s jobClass:" + jobDetail.getJobClass().getName());*/
21         // 創建一個trigger實例,定義該Job立即執行,並且每隔兩秒鐘重復執行一次,直到永遠
22         //距離當前時間4秒鐘後首次執行,之後每隔兩秒鐘
23         //SimpleTrigger
24         /*SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
25                 .usingJobData("message", "hello myTrigger1")
26                 .usingJobData("DoubleTriggerValue",2.0D)
27                 .withIdentity("myTrigger", "group1")
28                 //設置開始時間結束時間,優先於執行次數
29                 .startAt(date)
30                 .endAt(endDate)
31                 //每兩秒鐘執行一次
32                 .withSchedule(
33                         SimpleScheduleBuilder
34                             .simpleSchedule()
35                             .withIntervalInSeconds(2)
36                             .withRepeatCount(3)
37                                     .repeatForever())
38                 .build();*/
39         
40         // CronTrigger
41         CronTrigger trigger = (CronTrigger) TriggerBuilder
42                 .newTrigger()
43                 .withIdentity("myTrigger", "group1")
44                 // 設置開始時間結束時間,優先於執行次數
45                 //.startAt(date).endAt(endDate)
46                 // 每兩秒鐘執行一次
47                 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
48                 .build();
49         //1.2017年內每天10點15分觸發一次
50         // 0 15 10 ? * * 2017
51         //2.每天的14點整至14點59分55秒,以及18點整至18點59分55秒,每5秒鐘觸發一次
52         //0/5 * 14,18 * * ?
53         //3.每月周一至周五的10點15分觸發一次
54         //0 15 10 ? * 2-6
55         //4.每月最後一天的10點15分觸發一次
56         //0 15 10 L * ?
57         //5.每月第三個周五的10點15分觸發一次
58         //0 15 10 ? * 6#3
59         // 創建scheduler實例
60         SchedulerFactory sfact = new StdSchedulerFactory();
61         Scheduler scheduler = sfact.getScheduler();
62         scheduler.start();
63         System.out.println("Scheduled time is :"+sf.format(scheduler.scheduleJob(jobDetail, trigger)));
64         //scheduler執行兩秒後掛起
65         /*Thread.sleep(2000L);
66         scheduler.shutdown(false);
67         System.out.println("scheduler is shut down?" + scheduler.isShutdown());*/
68 /*        scheduler.standby();
69         Thread.sleep(3000L);
70         scheduler.start();*/
71     }
72 }

技術分享圖片

技術分享圖片

配置文件quartz.properties

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5 
#0-9
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

Quartz任務調度框架的簡單應用