Quartz.Net cron触发器每月安排一项工作

时间:2014-08-19 06:52:18

标签: c# windows-services quartz.net

我正在尝试使用quartz.net创建一个每1个月运行一次的工作

我对如何实现这一点感到有些困惑,任何人都可以就解决方案提出建议

感谢

P.S。我正在使用Quartz 2.2.2.400版

编辑:我做了每日触发

job = JobBuilder.Create<Jobs>()
            .WithIdentity(Params.JobsKind.BlaBlaBla.ToString(), "group1")
            .Build();

        trigger = TriggerBuilder.Create()
            .WithIdentity("triggerBlaBlaBla", "group1")
            .WithDailyTimeIntervalSchedule(x => x.StartingDailyAt(Params.BlaBlaBLa)
                .WithIntervalInHours(24)
                .OnEveryDay())
            .Build();

        sched.ScheduleJob(job, trigger);

现在我需要每月触发

3 个答案:

答案 0 :(得分:8)

这就是我实施我的解决方案的方式,就像你的一样,

基本上 CronScheduleBuilder 类有一个方法 MonthlyOnDayAndHourAndMinute(白天,小时,分钟),您可以在其中输入作业运行的日,小时和分钟。

除非您习惯使用unix CRON作业,否则它可以完美地运行并且更具人性化。希望这会有所帮助。

            // define the job and tie it to  class
            IJobDetail job_tcs = JobBuilder.Create<DuesFeedbackJob>()
                .WithIdentity("job_tcs", "group1")
                .Build();
            // Trigger the job to run every 2nd of the month at 1 am
            ITrigger trigger_tcs = TriggerBuilder.Create()
                .WithIdentity("Run Infinitely every 2nd day of the month", "Monthly_Day_2")
                .StartNow()
                .WithSchedule(CronScheduleBuilder.MonthlyOnDayAndHourAndMinute(2, 1, 0))
                .Build();

            // Tell quartz to schedule the job using our trigger
            Console.WriteLine("Scheduling " + job_tcs);
            scheduler.ScheduleJob(job_tcs, trigger_tcs);

答案 1 :(得分:0)

我认为这个问题是通过制作一个cronExpression并将其作为参数添加到CronScheduleBuilder来处理的。

代码将是这样的:

static CronScheduleBuilder cronSchedule;

job = JobBuilder.Create<Jobs>()
            .WithIdentity(Params.JobsKind.BlaBlaBla.ToString(), "group1")
            .Build();

        CronExpression cexp = new CronExpression("0 50 10 1 * ?");
        cronSchedule = CronScheduleBuilder.CronSchedule(cexp);
        trigger = TriggerBuilder.Create()

               .WithIdentity("triggerBlaBlaBla", "group1")
               .StartNow()
               .WithSchedule(cronSchedule)
               .Build();
        sched.ScheduleJob(job, trigger);

是谁试图帮助我

答案 2 :(得分:0)

您可以使用CalendarIntervalSchedule,使用RepeatFrequency是1

trigger1 = TriggerBuilder.Create()
                        .ForJob(jobDetail1)
                        .StartAt(startDate)
                        .EndAt(endDate)
                        .WithIdentity(triggerName, "group1")
                        .WithCalendarIntervalSchedule(x => x.WithIntervalInMonths(RepeatFrequency))
                        .WithCalendarIntervalSchedule(x => x.WithMisfireHandlingInstructionFireAndProceed())
                        .Build();