2013-07-04 2 views
2

J'utilise les derniers paquets Quartz.net de nuget (v2.1.2.400).Quartz.net Exécution tardive avec DisallowConcurrentExecution

Ceci est mon travail ...

[DisallowConcurrentExecution] 
[PersistJobDataAfterExecution] 
public class HelloJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.Out.WriteLine("Hello Job Now=" + DateTime.Now.ToString("s") + " Next=" + context.NextFireTimeUtc.Value.ToLocalTime().ToString("s")); 
    } 
} 

Ceci est mon travail et la configuration de déclenchement ...

  trigger = TriggerBuilder.Create() 
      .WithIdentity("trigger1") 
      .StartAt(DateTime.UtcNow.AddSeconds(5)) 
      .WithSchedule(SimpleScheduleBuilder 
       .RepeatSecondlyForever(10) 
       .WithMisfireHandlingInstructionIgnoreMisfires()      
      ).Build(); 
      var job = JobBuilder.Create<HelloJob>().WithIdentity("job1").Build(); 
      sched.ScheduleJob(job, trigger); 

Voici ma config ...

 properties["quartz.scheduler.instanceName"] = "TestScheduler"; 
     properties["quartz.scheduler.instanceId"] = "AUTO"; 
     properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; 
     properties["quartz.jobStore.useProperties"] = "true"; 
     properties["quartz.jobStore.dataSource"] = "default"; 
     properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; 
     // if running MS SQL Server we need this 
     properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; 
     properties["quartz.jobStore.clustered"] = "true"; 

     //http://www.connectionstrings.com/mysql#mysql-connector-net-mysqlconnection 
     properties["quartz.dataSource.default.connectionString"] = "Server=localhost;Database=quartz;Uid=xxxx;Pwd=xxxxxx;"; 
     properties["quartz.dataSource.default.provider"] = "MySql-65"; 

Si Je cours un travail sans l'attribut [DisallowConcurrentExecution] il s'exécute comme prévu (c.-à-d. Toutes les 10 secondes) comme si ...

Hello Job Now=2013-07-04T13:04:16 Next=2013-07-04T13:04:26 
Hello Job Now=2013-07-04T13:04:26 Next=2013-07-04T13:04:36 
Hello Job Now=2013-07-04T13:04:36 Next=2013-07-04T13:04:46 
Hello Job Now=2013-07-04T13:04:46 Next=2013-07-04T13:04:56 
Hello Job Now=2013-07-04T13:04:56 Next=2013-07-04T13:05:06 

Si j'exécuter un travail avec le [DisallowConcurrentExecution] attribuer exécute bientôt en retard comme si ...

Hello Job Now=2013-07-04T13:11:00 Next=2013-07-04T13:11:10 
Hello Job Now=2013-07-04T13:11:10 Next=2013-07-04T13:11:20 
Hello Job Now=2013-07-04T13:11:47 Next=2013-07-04T13:11:30 
Hello Job Now=2013-07-04T13:12:17 Next=2013-07-04T13:11:40 

Comment puis-je empêcher l'exécution simultanée et que mes travaux sont exécutés à temps?

+0

Voir http://stackoverflow.com/questions/16520645/how-to-create-quartz-job-that-will-runs-every-n-seconds-even-if-job-takes-more-t/ 16525197 # 16525197 – sgmoore

+0

Désolé, je devrais avoir déclaré que je veux que cela fonctionne dans un environnement en cluster, donc une propriété d'exécution statique ne fonctionnera pas. –

Répondre

2

Cela a été un bug dans Quartz.NET et a été corrigé dans la version 2.2.3. Je vous suggère de passer à la dernière version.