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

  • 相关阅读:
    Android消息机制(Handler)详述
    Android自定义组件-以饼状图并实现点击事件为例
    Markdown中tab的解析与4个空格 问题
    策略模式(Strategy)
    观察者模式(Observer)
    适配器模式(Adapter Class/Object)
    建造者模式(Builder)
    简单工厂模式、工厂方法模式、抽象工厂模式
    单例模式(Singleton)
    工具推荐:前后端一体化部署,效能提升开源“神器”
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/7403452.html
Copyright © 2020-2023  润新知