• Quartz.NET学习笔记(三) 简单触发器


    触发器是Quartz.NET的另外第一个核心元素,他有2种类型,简单触发器(Simple Trigger)和计划任务触发器(Cron  Trigger), 一个触发器可以绑定一个任务。

    通用触发器属性

    • JobKey – 当前触发器绑定任务的唯一标识符
    • StartTimeUtc – 触发器的生效开始时间
    • EndTimeUtc – 触发器的生效结束时间

    设置触发器的优先级

    有些时候,你的程序中可能需要多个触发器,Quartz.NET的调度器可能在同一时间没有足够的资源来触发所有的触发器,这时候我们就需要给触发器设置优先级,让Quartz.NET帮助我们优先触发优先级高的触发器。

    在声明触发器的时候,可以使用WithPriority方法为触发器指定一个优先级权重,权重越高的,调度器会优先触发

    例:

    ISchedulerFactory schedFact = new StdSchedulerFactory();
    
     
    
    IScheduler sched = schedFact.GetScheduler();
    
              
    
     
    
    IJobDetail job = JobBuilder.Create<FirstJob>()
    
        .UsingJobData("MyName", "Lunan")
    
        .WithIdentity("myJob")
    
        .Build();
    
     
    
    IJobDetail job2 = JobBuilder.Create<SecondJob>()
    
        .UsingJobData("MyName", "Lunan")
    
        .WithIdentity("myJob2")
    
        .Build();
    
     
    
    ITrigger trigger = TriggerBuilder.Create()
    
        .WithIdentity("myTrigger")
    
        .StartNow()
    
        .WithPriority(8)
    
        .Build();
    
     
    
    ITrigger trigger2 = TriggerBuilder.Create()
    
        .WithIdentity("myTrigger2")
    
        .StartNow()
    
        .WithPriority(999)
    
        .Build();
    
     
    
    sched.ScheduleJob(job, trigger);
    
    sched.ScheduleJob(job2, trigger2);
    
     
    
    sched.Start();



    执行结果

    简单触发器(Simple Trigger)

    如果你的项目需求是一下2种类型,可以使用Quartz.NET中的简单触发器。

    • 在某个时间点执行一次任务
    • 在某个时间点开始执行任务,并之后每隔固定的时间,再次执行当前任务

    在某个时间点触发一次任务就停止

    ISimpleTrigger trigger3 = (ISimpleTrigger)TriggerBuilder.Create()
    
        .WithIdentity("trigger3", "group1")
    
        .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
    
        .ForJob("job1", "group1")
    
    .Build();

    该任务会在2017-07-12 15:30:00被执行。

    在某个时间点触发触发任务,并在之后每10分钟继续触发一次

    ISimpleTrigger trigger4 = (ISimpleTrigger)TriggerBuilder.Create()
    
        .WithIdentity("trigger4", "group1")
    
        .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
    
        .WithSimpleSchedule(x =>
    
        {
    
            x.WithIntervalInMinutes(10);
    
            x.RepeatForever();
    
        })
    
        .ForJob("job1", "group1")
    
    .Build();

    该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,永不停止。

    在某个时间点开始触发任务,并在之后每10分钟继续触发一次,触发10次

    ISimpleTrigger trigger5 = (ISimpleTrigger)TriggerBuilder.Create()
    
        .WithIdentity("trigger5", "group1")
    
        .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
    
        .WithSimpleSchedule(x =>
    
        {
    
             x.WithIntervalInMinutes(10);
    
             x.WithRepeatCount(10);
    
        })
    
        .ForJob("job1", "group1")
    
    .Build();

    该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,运行10次。

    注:这里需要注意,这个触发器会触发11次,15:30会执行一次,加上后面的10次,一共是11次。

     

    在某个时间点开始触发任务,并在之后每10分钟继续触发一次,直到某个时间结束

    ISimpleTrigger trigger7 = (ISimpleTrigger)TriggerBuilder.Create()
    
    .WithIdentity("trigger7", "group1")
    
    .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
    
        .WithSimpleSchedule(x => x
    
            .WithIntervalInMinutes(5)
    
            .RepeatForever())
    
        .EndAt(DateBuilder.DateOf(22, 0, 0))
    
        .Build();

    该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,直到当天的22:00结束。

     

    从当前时间开始,一定时间之后,执行一次任务

    ISimpleTrigger trigger6 = (ISimpleTrigger)TriggerBuilder.Create()
    
        .WithIdentity("trigger6", "group1")
    
        .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute))
    
        .ForJob("job1", "group1")
    
    .Build();

    该任务会在未来5分钟的时候,运行一次

  • 相关阅读:
    mysql存储过程之游标
    ip后面带端口号如何做域名解析
    将博客搬至CSDN
    java微信公众号JSAPI支付以及所遇到的坑
    button元素的id与onclick的函数名字相同 导致方法失效的问题
    在centOS使用systemctl配置启动多个tomcat
    mysql正则表达式,实现多个字段匹配多个like模糊查询
    web前端基础知识-(二)CSS基本操作
    web前端基础知识-(一)html基本操作
    python学习笔记-(十六)python操作mysql
  • 原文地址:https://www.cnblogs.com/lwqlun/p/9095111.html
Copyright © 2020-2023  润新知