2010-05-05 74 views
5

在夸脫,我可以用一個觸發器來調度多個就業機會,讓所有的工作被並行執行。做這個的最好方式是什麼。石英:觸發多個作業

例,每隔一小時並行執行作業J1,J2,...,JN。假設這些作業之間不存在依賴關係。

回答

1

你可以建立觸發其他作業觸發任務。通過使用JobMap屬性可以對其進行配置,並且可以重新使用該類來觸發任意一組作業(也可以爲自己執行第一組作業)。

+0

理想情況下,你不應該做這樣的事情,因爲它不是調度作業的正確方法 – 2016-12-01 11:45:42

8

你不能用相同的觸發(一個給定的任務可以有多個觸發器,但不是反之亦然)多項工作聯繫在一起,但你可以設置多個相同的觸發器,每一個工作。

爲了讓他們並行運行,你需要確保Quartz的線程池有足夠的能力這樣做。有關線程池的配置選項,請參見here

+1

鏈接已經死了。如果可以,請糾正 – 2012-10-17 14:48:19

0

我最終作出一個幫助功能GetTrigger

class Program 
{ 
    static void Main(string[] args) 
    { 
     Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };    

     IJobDetail jobOne = JobBuilder.Create<JobOne>() 
      .WithIdentity(typeof(JobOne).Name) 
      .Build(); 

     IJobDetail jobTwo = JobBuilder.Create<JobTwo>() 
      .WithIdentity(typeof(JobTwo).Name) 
      .Build(); 

     var jobOneTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobOne); 
     var jobTwoTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobTwo); 

     IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); 
     scheduler.ScheduleJob(jobOne, jobOneTrigger); 
     scheduler.ScheduleJob(jobTwo, jobTwoTrigger); 

     scheduler.Start(); 
    } 

    private static ITrigger GetTrigger(TimeSpan executionTimeSpan, IJobDetail forJob) 
    {    
     return TriggerBuilder.Create() 
      .WithIdentity(forJob.JobType.Name+"Trigger") 
      .StartNow() 
      .WithSimpleSchedule(x => x 
       .WithInterval(executionTimeSpan) 
       .RepeatForever()) 
      .ForJob(forJob.JobType.Name) 
      .Build(); 
    } 
} 

public class JobOne : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("JobOne"); 
    } 
} 

public class JobTwo : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("JobTwo"); 
    } 
}