【问题标题】:Cron Expression to not run on a particular dateCron 表达式不在特定日期运行
【发布时间】:2026-01-03 19:45:01
【问题描述】:

我有一个使用 Quartz.NET 运行的 cron 作业。

    <cron-expression>0 5 * * * ?</cron-expression>

如上所示,它每 5 分钟运行一次,但我希望它不要从 2013 年 12 月 30 日下午 5 点到 2014 年 1 月 1 日上午 7 点运行。

这可能吗有人知道吗? 谢谢 尼尔

【问题讨论】:

    标签: cron quartz.net


    【解决方案1】:

    使用日历最容易排除。使用日历,您可以从日程表中排除一组天、工作日、一天中的时间或 cron 表达式。日历检查总是在确定触发时间后检查(可以运行吗?)。

    您可以链接多个日历,因为除此之外,您还需要通过一年、多天和时间范围来度过令人讨厌的复杂性。更具可读性和可理解性的解决方案可能是实现您自己的固定时间范围日历(实现 ICalendar),该日历采用结束和开始时间并将它们排除在外。

    您当然也可以让您的第一个 cron 触发器在 2013-12-30 17:00 结束,并添加一个从 2014-01-01 07:00 开始的新触发器。

    这是一个使用 CronCalendar 的简单示例:

    var calendar = new CronCalendar("0 * 1 * * ?");
    scheduler.AddCalendar("myCalendar", calendar, replace: false, updateTriggers: false);
    
    var trigger = TriggerBuilder.Create()
        .WithCronSchedule("0 5 * * * ?")
        .ModifiedByCalendar("myCalendar")
        .Build();
    
    scheduler.ScheduleJob(trigger);
    

    【讨论】:

    • 谢谢马尔科!那至少给了我一些选择!我喜欢实现 ICalender 的想法。在编写实现时,如何将其与特定触发器关联?
    最近更新 更多