我在Quartz中设置了几个作业,以便按设定的时间间隔运行。问题是,当服务启动时,它会尝试一次启动所有作业……有没有办法使用.xml配置为每个作业添加延迟?
以下是两个作业触发器示例:
<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>正如你所看到的,有两个触发器,第一个每天重复,下一个每天重复两次。
我的问题是,我希望第一个或第二个作业在另一个作业开始几分钟后开始……(因为它们最终都访问相同的API,并且我不想使请求过载)
是否存在重复延迟或优先级属性?我找不到任何这样说的文档..
发布于 2011-06-23 12:32:15
我知道您是通过XML完成此操作的,但是在代码中,您可以将StartTimeUtc设置为像这样延迟30秒……
trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30);发布于 2016-05-19 09:02:42
这对于您的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))发布于 2011-02-10 00:36:05
您现在可能已经看到了这一点,但是可以链式作业,尽管它不支持开箱即用。
http://quartznet.sourceforge.net/faq.html#howtochainjobs
https://stackoverflow.com/questions/3515542
复制相似问题