Quartz(二)-SimpleTrigger

介绍

如果你的job需要在指定的时间执行,或者要间断的不断地执行,SimpleTrigger就能满足这些需求。比如,让你的触发器在具体时间 触发,几秒执行一次,连续执行几次,这个时候可以使用SimpleTrigger。
SimpleTrigger中的几个参数:JobKey,start-time, end-time, repeat count, 以及repeat interval。

JobKey

表示job实例的标识,触发器被触发时,该指定的job实例会执行

repeat count:

重复次数的设置可以是0, 正数,或者常量SimpleTrigger.REPEAT_INDEFINITELY

repeat interval:

0, 正数,可以设置分钟和毫秒数 。如果repeat interval被设置为0,在trigger 执行repeat count次数的时候会出现trigger并发去触发的情况(调度程序几乎是同时去操作这些trigger)

startTime:

设置trigger触发的时间

endTime

如果指定了endTime这个属性的话,会重写repeat count属性。比如创建一个每10分钟就会触发的trigger,并为这个trigger设置了endTime属性,这样程序就不需要计算在start-time和end-time执行了多少次。可以在指定end-time的同时也将repeat count设置为REPEAT_INDEFINITELY常量(或repeat count指定一个比较大的值,这个值足以超过 trigger在end-time到来之前执行的实际次数)

实例

例子:距离当前5秒后每隔2秒钟执行一次任务10秒后结束

pom包

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.3</version>
</dependency>
  1. HelloJob
package quartz;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @Description helloJob
 * @Author lss0555
 * @Date 2018/8/5/005 19:16
 **/
public class HelloJob implements Job{
    private String username;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void execute(JobExecutionContext context) throws JobExecutionException {
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("HelloJob实例:"+sf.format(date));
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        JobDataMap tDataMap = context.getTrigger().getJobDataMap();
        String user = dataMap.getString("user");
//        String username = tDataMap.getString("username");
        //通过contex里面取出user值
//        System.out.println("JobDetail获取传递数据:"+user);
        //通过定义username的setter和get方法自动获取username值
//        System.out.println("Trigger获取传递数据:"+username);
    }
}

  1. 测试类
 public static void main(String[] args) throws SchedulerException {
        //创建JobDetail实例  将实例与Hellojob绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("jobName1","group1")
                .usingJobData("user","lss")
                .build();
        //
        System.out.println("jobDetail的jobName:"+jobDetail.getKey().getName());
        System.out.println("jobDetail的jobGroup:"+jobDetail.getKey().getGroup());
        System.out.println("jobDetail的jobClass:"+jobDetail.getJobClass().getName());

        //设置trigger开启时间
        Date starDate = new Date();
        starDate.setTime(starDate.getTime()+5000L);

        //设置trigger结束时间
        Date endDate = new Date();
        endDate.setTime(endDate.getTime()+10000L);

        //创建一个Trigge实例,定义Job的执行方式
        Trigger trig=TriggerBuilder.newTrigger()
                .withIdentity("myTrigger","group1")
                .usingJobData("username","lss0555")
                //设置立即开启生效
//                .startNow()
                .startAt(starDate)
                //设置结束时间
                .endAt(endDate)
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()//使用simpleTrigger
                .withIntervalInSeconds(2).repeatForever())//2秒钟执行一次,一直运行下去
        .build();
        //创建Schedule实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail,trig);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间:"+sf.format(new Date()));
 }
结果

当前时间:2018-08-05 20:58:22
HelloJob实例:2018-08-05 20:58:27
HelloJob实例:2018-08-05 20:58:29
HelloJob实例:2018-08-05 20:58:31

猜你喜欢

转载自blog.csdn.net/u010520146/article/details/81435459