Quartz.Net - 延迟一个简单的触发器启动

时间:2010-08-18 18:45:54

标签: quartz-scheduler quartz.net

我在Quartz中设置了一些作业,以设定的间隔运行。问题是,当服务启动时,它会尝试立即启动所有作业...有没有办法使用.xml配置为每个作业添加延迟?

以下是2个职位触发示例:

 <simple>
    <name>ProductSaleInTrigger</name>
    <group>Jobs</group>
    <description>Triggers the ProductSaleIn job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>ProductSaleIn</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>86400000</repeat-interval>        
  </simple>

 <simple>
    <name>CustomersOutTrigger</name>
    <group>Jobs</group>
    <description>Triggers the CustomersOut job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>CustomersOut</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>43200000</repeat-interval> 
  </simple>

如你所见,有2个触发器,第一个每天重复,下一个每天重复两次。

我的问题是我希望第一个或第二个作业在另一个之后开始几分钟......(因为它们最终都是访问相同的API而我不想重载请求)

是否有重复延迟或优先级属性?我找不到任何文件这么说..

3 个答案:

答案 0 :(得分:4)

我知道你是通过XML做到的,但是在代码中你可以将StartTimeUtc设置为像这样延迟30秒......

trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30);

答案 1 :(得分:0)

你现在可能已经看过这个了,但它可以连接工作,虽然不支持开箱即用。

http://quartznet.sourceforge.net/faq.html#howtochainjobs

答案 2 :(得分:0)

这并不是XML文件的完美答案 - 但是通过代码,您可以在构建触发器时使用StartAt扩展方法。

/* calculate the next time you want your job to run - in this case top of the next hour */
var hourFromNow = DateTime.UtcNow.AddHours(1);
var topOfNextHour = new DateTime(hourFromNow.Year, hourFromNow.Month, hourFromNow.Day, hourFromNow.Hour, 0, 0);

/* build your trigger and call 'StartAt' */
TriggerBuilder.Create().WithIdentity("Delayed Job").WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()).StartAt(new DateTimeOffset(topOfNextHour))