Quartz的SimpleTrigger

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/84172146

一 点睛

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

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

扫描二维码关注公众号,回复: 4135528 查看本文章

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

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/84172146