2013-10-07 58 views
2

我打算使用石英生成器来创建cron触发器并试图给出startnow指令。但触发器不会启动,而是在完成给定的时间间隔后才启动。有人可以帮助我在启动服务器时启动触发器。我使用普通石英和无弹簧。石英触发器建设者在启动时不会触发触发器

Trigger trigger = newTrigger() 
     .withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP) 
     .withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing()) 
     .startNow() 
     .build(); 

回答

4

有不会是调用一个CronTrigger startNow()的任何影响,因为它根据与基于SimpleTrigger时间供给cron表达式触发工作。

您的cron表达式告诉Quartz从每小时的第0分钟开始每60分钟运行一次。 除非您在第0分钟开始调度程序,否则您将看不到startNow效果。

希望这对你很清楚。

请参阅Quartz CronTrigger tutorials/documentation了解更多详情。

2

您可以使用StartNow为您的作业添加第二个触发器。如果你有一个叫做SomeJob的工作班,我认为这对你很有用。

var schedulerFactory = new StdSchedulerFactory(); 
    var scheduler = schedulerFactory.GetScheduler(); 
    scheduler.Start(); 

    IJobDetail job = JobBuilder.Create<SomeJob>() 
      .WithIdentity("job1", SchedulerConstants.QI_GROUP) 
      .Build();   
    Trigger trigger = newTrigger() 
      .withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP) 
      .withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing()) 
      .build(); 
    scheduler.ScheduleJob(job, trigger); 

    IJobDetail job2 = JobBuilder.Create<SomeJob>() 
      .WithIdentity("job2", SchedulerConstants.QI_GROUP) 
      .Build();   
    Trigger trigger2 = newTrigger() 
      .withIdentity("trigger2",SchedulerConstants.QI_GROUP) 
      .StartNow() 
      .build(); 
    scheduler.ScheduleJob(job2, trigger2);