使用 Quartz.NET NthInclusionDayTrigger 需要帮助和建议

发布于 2024-09-18 03:34:04 字数 1762 浏览 5 评论 0原文

我最近开始使用 Quartz.NET,到目前为止,它真的很不错 有帮助。现在,我尝试使用它来创建一个运行一次的作业 使用 NthIncludedDayTrigger 的月份(我想使用 NthIncludedDayTrigger 因为最终我将指定一个日历 周末/节假日除外)。

为了熟悉代码,我已经 设置一个简单的控制台应用程序来创建 NthInclusionDayTrigger 其中第一次触发时间将为从现在起 15 秒:

static void Main(string[] args) 
{ 
    IScheduler scheduler = StdSchedulerFactory.DefaultScheduler; 
    scheduler.Start();

    var jobDetail = new JobDetail("Job name", "Group name", typeof(SomeIJobImplementation)); 
    var trigger = new NthIncludedDayTrigger(); 
    trigger.Name = "Trigger name"; 
    trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.DoNothing; 
    trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly; 

    //I'm using the following while experimenting with the code (AddHour(1) to account for BST): 
    trigger.FireAtTime =  DateTime.UtcNow.AddHours(1).AddSeconds(15).ToString("HH:mm:ss"); 

    //I'm using the following while experimenting with the code: 
    trigger.N = DateTime.Today.Day;

    Console.WriteLine("Started, press any key to stop ..."); 
    Console.ReadKey(); 

    scheduler.Shutdown(false); 
} 

...

public class SomeIJobImplementation : IJob 
{ 
    public void Execute(JobExecutionContext context) 
    { 
            Logger.Write(String.Format(
                "Job executed called at {0}", 
                DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")), null, 1, 
                TraceEventType.Information); 
    } 
} 

运行此命令会导致作业被执行多次 (大约每秒一次)持续一分钟。我正在使用 ADO.NET 作业存储,可以在我的数据库中看到 QRTZ_TRIGGERS.NEXT_FIRE_TIME 设置为最后执行的时间,即好像没有被调度到 再次运行。

我预计上面的代码会运行该作业一次(大约 15 秒),然后安排该作业在一个月后再次运行。

也许问题出在我使用 Quartz.NET 的方式上 我一直在尝试,或者也许我的期望是错误的?任何一个 方式,我将非常感谢任何帮助/建议来解释 我观察到的行为,以及我需要改变什么才能获得 我想要的行为。

I've started using Quartz.NET recently, and so far, it's been really
helpful. Now, I'm trying to use it to create a job that runs once a
month using a NthIncludedDayTrigger (I want to use the
NthIncludedDayTrigger as eventually I will be specifying a calendar to
exclude weekends/holidays).

To familiarise myself with the code, I've
set up a simple console application to create an NthIncludedDayTrigger
where the first fire time will be 15 seconds from now:

static void Main(string[] args) 
{ 
    IScheduler scheduler = StdSchedulerFactory.DefaultScheduler; 
    scheduler.Start();

    var jobDetail = new JobDetail("Job name", "Group name", typeof(SomeIJobImplementation)); 
    var trigger = new NthIncludedDayTrigger(); 
    trigger.Name = "Trigger name"; 
    trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.DoNothing; 
    trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly; 

    //I'm using the following while experimenting with the code (AddHour(1) to account for BST): 
    trigger.FireAtTime =  DateTime.UtcNow.AddHours(1).AddSeconds(15).ToString("HH:mm:ss"); 

    //I'm using the following while experimenting with the code: 
    trigger.N = DateTime.Today.Day;

    Console.WriteLine("Started, press any key to stop ..."); 
    Console.ReadKey(); 

    scheduler.Shutdown(false); 
} 

...

public class SomeIJobImplementation : IJob 
{ 
    public void Execute(JobExecutionContext context) 
    { 
            Logger.Write(String.Format(
                "Job executed called at {0}", 
                DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")), null, 1, 
                TraceEventType.Information); 
    } 
} 

Running this results in the job being executed multiple times
(approximately once per second) for one minute. I'm using an ADO.NET
job store and can see in my database that QRTZ_TRIGGERS.NEXT_FIRE_TIME
is set to the last executed time, i.e. doesn't seem to be scheduled to
run again.

I expected the above code to run the job once (after about 15
seconds), then schedule the job to run again in one months time.

Perphaps the issue is just with the way I'm using Quartz.NET whilst
I've been experimenting or, maybe, my expectations are wrong? Either
way, I would be most grateful for any help/suggestions to explain the
behaviour I've observed, and what I need to change to get the
behaviour I want.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

数理化全能战士 2024-09-25 03:34:08

我一定迟到了,但我试图实施相同的解决方案并最终来到这里。
我认为您应该在定义作业和触发器后为调度程序加注星号。

I must be late but I was trying to implement the same solution and ended up here.
I reckon you should star the scheduler after you've defined jobs and triggers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文