石英.Net cron触发器每月调度一个作业



我正在尝试创建一个作业与quartz.net将运行每1个月

我对如何实现这个有点困惑,谁能建议一个解决方案

感谢

注:我使用的是石英版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);

现在我需要每月触发

这就是我如何实现我的解决方案,就像你的,

基本上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);

我认为这个问题是通过制作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);

感谢你对我的帮助

您可以使用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();

相关内容

最新更新