我最近开始使用Quartz.NET,到目前为止,它确实是 很有帮助。现在,我正在尝试使用它创建一个运行一次的作业 使用NthIncludedDayTrigger的月份(我想使用 NthIncludedDayTrigger最终我将指定一个日历 排除周末/假期)。
为了熟悉代码,我已经 设置一个简单的控制台应用程序来创建NthIncludedDayTrigger 从现在起第一次开火时间为15秒:
static void Main(string[] args)
{
IScheduler scheduler = StdSchedulerFactory.DefaultScheduler;
scheduler.Start();
var jobDetail = new JobDetail("Job name", "Group name", typeof(SomeIJobImplementation));
var trigger = new NthIncludedDayTrigger();
trigger.Name = "Trigger name";
trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.DoNothing;
trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly;
//I'm using the following while experimenting with the code (AddHour(1) to account for BST):
trigger.FireAtTime = DateTime.UtcNow.AddHours(1).AddSeconds(15).ToString("HH:mm:ss");
//I'm using the following while experimenting with the code:
trigger.N = DateTime.Today.Day;
Console.WriteLine("Started, press any key to stop ...");
Console.ReadKey();
scheduler.Shutdown(false);
}
...
public class SomeIJobImplementation : IJob
{
public void Execute(JobExecutionContext context)
{
Logger.Write(String.Format(
"Job executed called at {0}",
DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")), null, 1,
TraceEventType.Information);
}
}
运行此操作会导致作业多次执行 (大约每秒一次)一分钟。我正在使用ADO.NET 工作存储,可以在我的数据库中看到QRTZ_TRIGGERS.NEXT_FIRE_TIME 设置为最后执行的时间,即似乎没有安排 再次运行。
我希望上面的代码能够运行一次(大约15次之后) 秒),然后安排作业在一个月内再次运行。
Perphaps问题就在于我使用Quartz.NET的方式 我一直在试验,或许,我的期望是错的?或 方式,我将非常感谢任何帮助/建议解释 我观察到的行为,以及我需要改变以获得的行为 我想要的行为。
答案 0 :(得分:1)
我必须迟到但我试图实施相同的解决方案并最终到此为止。 我认为你应该在定义了工作和触发器后为调度程序加注星标。