2013-07-04 71 views
2

我正在使用最新的nuget Quartz.net软件包(v2.1.2.400)。Quartz.net使用DisallowConcurrentExecution后执行

这是我的工作......

[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")); 
    } 
} 

这是我的工作,触发设置...

  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); 

这是我的配置...

 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"; 

如果我运行一个没有[DisallowConcurrentExecution]属性的作业,它像预期的那样运行(即每10秒)...

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 

如果我运行与[DisallowConcurrentExecution]任务属性它很快就慢了,像这样的时间表......

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 

如何防止并发执行,并有我的工作时间运行?

+0

查看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

对不起,我应该说,我希望这在集群环境中工作,所以静态运行属性将无法正常工作。 –

回答

2

这是Quartz.NET中的一个bug,已经在2.2.3版本中修复。我建议你升级到最新版本。