【问题标题】:Quartz.net - fire trigger in custom timeQuartz.net - 在自定义时间触发
【发布时间】:2012-04-07 07:03:09
【问题描述】:

我有一组日期时间(大约 5000 个元素),并希望在每个日期时间上执行一项工作。 数组中的日期时间是自定义的,不是定期的,所以我不能使用 CronTrigger 等。 有没有一种简单的方法来创建在给定时间触发的触发器? 是的,我知道每次工作完成后我都可以启动一个新的简单触发器(一次触发,不重复),但这种方式对我来说不方便。

【问题讨论】:

  • 请确保在您的问题中至少包含一个语言标签,以帮助确保最能帮助您的人找到您的问题。另请务必阅读标签说明,石英标签已贬值。

标签: c# .net quartz-scheduler quartz.net


【解决方案1】:

您可以编写自己的触发器并使用它来执行您的工作。如果您使用的是 v1.0,那么您必须创建一个扩展 Trigger 的类。查看docs 了解更多详情。如果您运行的是 v2.0,那么您想扩展 AbstractTrigger

【讨论】:

  • 太好了,我已经要求 simple 方法来做到这一点。制作我自己的触发器不是一个简单的方法:(
  • 看看源代码中的SimpleTriggerImpl.cs。真的没那么糟糕。
【解决方案2】:

您可以自定义触发器的日期时间。简单触发器将从您的自定义时间触发 n 次

public class JobScheduler
    {
       public static void Start()
       {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler();
            DateTime[] Jobtime = new DateTime[5]; //Array Have Job time
            startDate[0] = new DateTime(2015, 6, 3, 16, 57, 0);
            startDate[1] = new DateTime(2015, 6, 3, 16, 59, 0);
            startDate[2] = new DateTime(2015, 6, 3, 17, 1, 0);
            startDate[3] = new DateTime(2015, 6, 3, 17, 4, 0);

            for (int i = 1; i < Jobtime.Count(); i++)
        {

            sched.Start();


            string strjob = "job" + i.ToString();
            string strgroup = "group" + i.ToString();
            string strtigger = "trigger" + i.ToString();

            IJobDetail job = JobBuilder.Create<EmailJob>()
                .WithIdentity(strjob, strgroup)
                .Build();
            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()

                .WithIdentity(strtigger, strgroup)
                .StartAt(Jobtime[i])

                .Build();

            sched.ScheduleJob(job, trigger);

        }

       }
    }

【讨论】:

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