Tirgger SimpleTrigger CronTrigger(四)

简介:   触发器通用属性:     jobKey:表示job实例的标识,触发器被触发时,指定的job实例会被执行。     startTime:表示触发器的时间表 首次被触发的时间,他的值类型为java.uti.Date。

  触发器通用属性:

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

    startTime:表示触发器的时间表 首次被触发的时间,他的值类型为java.uti.Date。

    endTime:指定的触发器不在被执行的时间,他的值类型为java.uti.Date。

实现:

package quartz;

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

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerClass {

    public static void main(String[] args) throws SchedulerException {
        Date startDate = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间:"+sf.format(startDate));
        // 创建一个JobDetail实例
        // 将该实例与JobClass绑定,JobDetail是由Builder模式来创建的,JobDetail是来绑定job的。
        // withIdentity 创建唯一的标识
        JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName", "group").build();
        
        /*获取当前三秒后的时间*/
        startDate.setTime(startDate.getTime()+3000);
        /*获取当前六秒后的时间*/
        Date endDate = new Date();
        endDate.setTime(endDate.getTime()+6000);
        // 创建一个Tigger实例,定义 job立即执行,并每隔一段时间重复执行,每隔5秒中执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger").startAt(startDate).endAt(endDate)
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();

        // 创建一个Scheduler实例, Scheduler是由工厂模式来创建的 so
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();

        // 调度器调用任务和触发器,scheduler将job,trigger绑定在一起。
        scheduler.scheduleJob(jobDetail, trigger);

    }
}
package quartz;

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

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.Trigger;

public class JobClass implements Job {
    

    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        
        
          Date date=new Date(); 
          SimpleDateFormat sf=new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); 
          System.out.println("执行时间:"+sf.format(date));
         // 编写业务逻辑
          System.out.println("hello Quartz");
          JobKey jobKey=arg0.getJobDetail().getKey();
          Trigger triiger=arg0.getTrigger();
          System.out.println("开始时间"+sf.format(triiger.getStartTime()));
          System.out.println("结束时间"+sf.format(triiger.getEndTime()));
          System.out.println("实例名称:"+jobKey.getName());
        
        

    }

}

执行结果为:

  SimpleTrigger

  作用:在指定的时间段内执行一次作业任务  或是 在指定的时间间隔内执行多次作业任务 (定时定频率)

 

       // 定时 当前时间3秒后执行
        startDate.setTime(startDate.getTime() + 3000);
        // Trigger trigger =TriggerBuilder.newTrigger().withIdentity("trigger").startAt(startDate).build();
        // 定频率 每隔3秒中执行一次,执行2次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger").startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).withRepeatCount(2)).build();

 

注意:

  重复次数,可以是0、正整数,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重复的间隔,必须是0,或者long型的正数,表示毫秒。注意,如果重复间隔为0,trigger将会以重复次数并发执行(或者以scheduler可以处理的近似并发数)。

  endTime属性的值会覆盖设置重复次数的属性值;比如,你可以创建一个trigger,在终止时间之前每隔10秒执行一次,你不需要去计算在开始时间和终止时间之间的重复次数,只需要设置终止时间并将重复次数设置为REPEAT_INDEFINITELY(当然,你也可以将重复次数设置为一个很大的值,并保证该值比trigger在终止时间之前实际触发的次数要大即可)。

 

 CronTrigger:基于日历的作业调度器。

 Cron表达式:

  用于配置CronTrigger实例。由7个子表达式组成的字符串,描述时间表的详细信息,格式:秒 分 时 日 月 周 年

 

Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();

 

 通配符说明

 实在是不知道怎么写  网上搜搜 cron在线生成表达式。

 

相关文章
|
4月前
|
JavaScript 前端开发 Unix
一篇学会cron表达式
# 1、定义 Cron表达式是一种用于定义定时任务的格式化字符串。它被广泛用于Unix、Linux和类Unix系统中,用于在指定的时间执行预定的任务。Cron表达式由6个字段组成,每个字段通过空格分隔开。 在本文中,我们将学习如何理解和编写Cron表达式。 Cron表达式的格式如下: ```javascript * * * * * * | | | | | | | | | | | +-- 星期(周日=0 或 7) | | | | +---- 月份(1-12) | | | +------ 日期(1-31) | | +-------- 小时(0-23) | +-------
96 1
一篇学会cron表达式
|
9月前
|
调度
Cron表达式详解
Cron表达式详解
203 1
|
11月前
Quartz-CronTrigger解读
Quartz-CronTrigger解读
36 0
|
11月前
|
Java Linux API
Quartz-Trigger详解
Quartz-Trigger详解
83 0
|
11月前
|
存储 调度
Quartz-SchedulerListener解读
Quartz-SchedulerListener解读
71 0
|
Java Spring
spring定时任务cron表达式(@Scheduled)
spring定时任务cron表达式(@Scheduled)
177 0
【Quartz】——CronTrigger 表达式的编写
【Quartz】——CronTrigger 表达式的编写
76 0
|
调度
SpringTask中Cron表达式
?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
89 0

热门文章

最新文章