2013-10-07 124 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);