Неповторяющиеся Кварцевые Рабочие места с Crontrigger? - PullRequest
1 голос
/ 23 марта 2012

У меня есть C # Topshelf windows Service, которая обрабатывает Quartz Jobs.Эти задания хранятся в базе данных, например:

public class JobConfiguration : IJobConfiguration {   
   public string Name { get; set; }          //ImportService
   public string Type { get; set; }          //[ClassName, AssemblyName]
   public string CronTrigger { get; set; }   //example: 0 0 12 * * ? 
   public string CronMeaning { get; set; }   //example: fire at noon every day
} 

Теперь мне нужно добавить задание, которое запускается только один раз (все остальные задания пришлось повторить).Мое (временное) решение - оставить поле CronTrigger NULL и запустить эти задания с помощью SimpleTrigger вместо CronTrigger, например:

if (JobConfiguration.CronTrigger == Null)
   //start job with Quartz SimpleTrigger
else
   //start job with Quartz CronTrigger

Есть ли лучшее решение для этого?Другими словами: есть ли CronTrigger, который позволяет вам начать работу только один раз и никогда не повторять ее?

1 Ответ

2 голосов
/ 23 марта 2012

Одним из решений было бы сделать абстрактный объект JobConfiguration и иметь наследование SimpleJobConfiguration и CronJobConfiguration от этого JobConfiguration.

В базе данных они могут храниться в той же таблице.

Другое решениеиспользовать StartTimeUtc и EndTimeUtc триггера, как Simple, так и Cron.Это позволяет вам создавать оператор cron, который будет выполняться каждые 30 минут, но с EndDateUtc в триггере DateTime.Now (). Add (TimeSpan.FromMinutes (31)).

...