簡體   English   中英

Quartz.Net cron觸發器每月計划一次作業

[英]Quartz.Net cron trigger to schedule a job every month

我正在嘗試使用quartz.net創建一個作業,該作業每1個月運行一次

我對如何實現這一點感到困惑,任何人都可以提出解決方案的建議

謝謝

PS正在使用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);

現在我需要每月觸發一次

這就是我實施像您一樣的解決方案的方式,

基本上, CronScheduleBuilder類具有方法MonthlyOnDayAndHourAndMinute(day,hour,minutes) ,您在其中輸入天,小時和分鍾來運行作業。

除非您習慣使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM