2013-02-16 143 views
2

我正在尝试使用Quartz.NET安排一些作业,但无法使其工作。我尝试了下面的代码,但是在满足指定的时间时没有发生任何事情。使用Quartz.NET调度Cron作业

public void Test() 
    { 
     ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); 
     IScheduler scheduler = schedulerFactory.GetScheduler(); 

     IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>() 
      .WithIdentity("TestJob") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .ForJob(jobDetail) 
      .WithCronSchedule("0 26 18 * * ?") 
      .WithIdentity("TestTrigger") 
      .StartNow() 
      .Build(); 
     scheduler.ScheduleJob(jobDetail, trigger); 
     scheduler.Start(); 
    } 

UPDATE:

我也尝试了以下,以确保它不是导致该问题的cron表达式。没有为我工作,要么...

IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>() 
       .WithIdentity("TestJob", "TestGroup") 
       .Build(); 
      ITrigger trigger = TriggerBuilder.Create() 
       .ForJob(jobDetail) 
       .WithSimpleSchedule(x=> x.RepeatForever().WithIntervalInSeconds(10).WithMisfireHandlingInstructionFireNow()) 
       .StartAt(new DateTimeOffset(DateTime.UtcNow.AddSeconds(10))) 
       .WithIdentity("TestTrigger", "TestGroup") 
       .Build(); 
      scheduler.ScheduleJob(jobDetail, trigger); 
      scheduler.Start(); 
      Console.WriteLine(DateTime.UtcNow.ToLongTimeString()); 
      Console.WriteLine(trigger.GetNextFireTimeUtc()); 

注意trigger.GetNextFireTimeUtc()返回一个有效的时间值,但工作永远不会被触发。

我哪里错了?

回答

7

一切都可以与您的示例代码,可能是来自SatellitePaymentGenerationJob实现的Execute方法是错误的,或作业执行但没有在预期的时间。在目前的形态下,它将在每天18:26被解雇,那是你想要的吗?

我的代码进行比较(工作):

class Program 
{ 
    static void Main(string[] args) 
    { 
     Test(); 
    } 

    public static void Test() 
    { 
     ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); 
     IScheduler scheduler = schedulerFactory.GetScheduler(); 

     IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>() 
      .WithIdentity("TestJob") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .ForJob(jobDetail) 
      .WithCronSchedule("0 45 20 * * ?") 
      .WithIdentity("TestTrigger") 
      .StartNow() 
      .Build(); 
     scheduler.ScheduleJob(jobDetail, trigger); 
     scheduler.Start(); 
    } 
} 

internal class SatellitePaymentGenerationJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("test"); 
    } 
} 
+0

是的,这是意图。我已经将它设置为每天20:00(现在按照我的时区)运行,并且什么也没有发生。 “Execute”方法开始处的断点未被命中。有任何想法吗? – Kassem 2013-02-16 18:02:12

+0

您是否在应用程序中调用了Test()方法? – 2013-02-16 19:28:57

+0

当然。我在控制台应用程序的'Main'方法中调用它。我也尝试了一个基于间隔的触发器(正如你可以在更新的问题中看到的那样),但它也不起作用。 – Kassem 2013-02-16 19:42:48