【问题标题】:Non-repeating Quartz Jobs with Crontrigger?使用 Crontrigger 的非重复 Quartz 作业?
【发布时间】:2012-03-23 13:50:29
【问题描述】:

我有一个处理 Quartz 作业的 C# Topshelf Windows 服务。这些作业存储在数据库中,如下所示:

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 可以让您只开始一次工作并且永远不会重复。

【问题讨论】:

    标签: c# quartz.net crontrigger topshelf


    【解决方案1】:

    一种解决方案是将 JobConfiguration 抽象化,并从该 JobConfiguration 继承 SimpleJobConfiguration 和 CronJobConfiguration。

    在数据库中,它们可以存储在同一张表中。

    另一种解决方案是使用触发器的 StartTimeUtc 和 EndTimeUtc,包括 Simple 和 Cron。这允许您创建一个 cron 语句,该语句将每 30 分钟运行一次,但在 DateTime.Now().Add(TimeSpan.FromMinutes(31)) 的触发器上使用 EndDateUtc。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多