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?
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
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. –