使用Quartz.NET NthIncludedDayTrigger时需要帮助和建议

时间:2010-09-08 19:16:43

标签: quartz-scheduler quartz.net

我最近开始使用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的方式 我一直在试验,或许,我的期望是错的?或 方式,我将非常感谢任何帮助/建议解释 我观察到的行为,以及我需要改变以获得的行为 我想要的行为。

1 个答案:

答案 0 :(得分:1)

我必须迟到但我试图实施相同的解决方案并最终到此为止。 我认为你应该在定义了工作和触发器后为调度程序加注星标。