zoukankan      html  css  js  c++  java
  • Tirgger SimpleTrigger CronTrigger(四)

      触发器通用属性:

        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在线生成表达式。

  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/7403452.html
Copyright © 2011-2022 走看看