1. 程式人生 > >Quartz的SimpleTrigger

Quartz的SimpleTrigger

一 點睛

1 SimpleTrigger的作用

在一個指定的時間段內執行一次作業任務。

或是在指定的時間間隔內多次執行作業任務。

2 需要注意的點

  • 重複次數可以為0,正整數或是SimpleTrigger.REPEAT_INDEFINITELY 常量值
  • 重複執行間隔必須為0或長整數
  • 一旦被指定了endTime引數,那麼它就會覆蓋重複次數引數的效果

二 實戰——距離當前的時間4秒鐘後執行且僅執行一次任務

1 啟動類

package com.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloScheduler {

    public static void main( String[] args ) throws SchedulerException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current Time is:" + simpleDateFormat.format(date));

        //建立一個JobDetail例項, 將該例項與hellojob class 繫結
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob").build();  //演示傳遞引數

        //獲取距離當前時間4秒鐘之後的時間
        date.setTime(date.getTime()+4000);
        //距離當前的時間4秒鐘後執行且僅執行一次任務
        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startAt(date)
                .build();
        //建立Schedule例項
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();

        scheduler.scheduleJob(jobDetail, trigger);
    }
}

2 Job類

package com.quartz;

import org.quartz.*;

import java.text.SimpleDateFormat;
import java.util.Date;


public class HelloJob implements Job{

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //列印當前執行的時間
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("+++++++++++++++++++++++++++");
        System.out.println("Current Exec Time is:" + simpleDateFormat.format(date));
        System.out.println("Hello world");

    }
}

3 執行結果

Current Time is:2018-11-17 10:07:29

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:07:33

Hello world

三 實戰——距離當前的時間4秒鐘首次執行任務,之後每隔兩秒重複執行一次任務,重複三次

1 啟動類

package com.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloScheduler {

    public static void main( String[] args ) throws SchedulerException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current Time is:" + simpleDateFormat.format(date));

        //建立一個JobDetail例項, 將該例項與hellojob class 繫結
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob").build();  //演示傳遞引數

        //獲取距離當前時間4秒鐘之後的時間
        date.setTime(date.getTime() + 4000);
        //距離當前的時間4秒鐘首次執行任務,之後每隔兩秒重複執行一次任務,重複三次
        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startAt(date)
                .withSchedule(
                        SimpleScheduleBuilder
                                .simpleSchedule()
                                .withIntervalInSeconds(2)
                                .withRepeatCount(3   //重複三次
                                        //SimpleTrigger.REPEAT_INDEFINITELY   //重複無限次
                                        ))
                .build();
        //建立Schedule例項
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();

        scheduler.scheduleJob(jobDetail, trigger);
    }
}

2 執行結果

Current Time is:2018-11-17 10:17:45

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:17:49

Hello world

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:17:51

Hello world

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:17:53

Hello world

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:17:55

Hello world

四 實戰——距離當前的時間4秒鐘首次執行任務,之後每隔兩秒重複執行一次任務,重複三次,直到距離當前時間6秒之後為止

1 啟動類

package com.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloScheduler {

    public static void main( String[] args ) throws SchedulerException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current Time is:" + simpleDateFormat.format(date));

        //建立一個JobDetail例項, 將該例項與hellojob class 繫結
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob").build();  //演示傳遞引數

        //獲取距離當前時間4秒鐘之後的時間
        date.setTime(date.getTime() + 4000);
        //獲取距離當前時間6秒鐘之後的時間
        Date endDate= new Date();
        endDate.setTime((endDate.getTime()+6000));
        //距離當前的時間4秒鐘首次執行任務,之後每隔兩秒重複執行一次任務,重複三次
        //直到距離當前時間6秒之後為止
        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startAt(date)
                .endAt(endDate)   //endAt優先於withRepeatCount
                .withSchedule(
                        SimpleScheduleBuilder
                                .simpleSchedule()
                                .withIntervalInSeconds(2)
                                .withRepeatCount(3   //重複三次
                                        //SimpleTrigger.REPEAT_INDEFINITELY   //重複無限次
                                        ))
                .build();
        //建立Schedule例項
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();

        scheduler.scheduleJob(jobDetail, trigger);
    }
}

2 測試結果

Current Time is:2018-11-17 10:22:30

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:22:34

Hello world

+++++++++++++++++++++++++++

Current Exec Time is:2018-11-17 10:22:36

Hello world