在有多个作业时启动和停止 Quartz Schedular Job 中的特定作业

问题描述 投票:0回答:1

我正在使用 Quartz 库来执行我项目中的一些任务,我需要执行多个任务,所以我正在使用多计划作业

问题是代码运行时作业停止了,因为代码使用 API 获取一些数据,有时代码挂起,线程或作业停止,所以我需要在挂起停止时重新启动作业因为服务器我通过 API 从它获取数据

我试试这个代码:

IJobDetail firstJob = JobBuilder.Create<FirstJob>()
           .WithIdentity("firstJob")
           .Build();

ITrigger firstTrigger = TriggerBuilder.Create()
             .WithIdentity("firstTrigger")
             .StartNow()
             .WithCronSchedule("0 * 8-22 * * ?")
             .Build();


IJobDetail secondJob = JobBuilder.Create<SecondJob>()
           .WithIdentity("secondJob")
           .Build();

ITrigger secondTrigger = TriggerBuilder.Create()
             .WithIdentity("secondTrigger")
             .StartNow()
             .WithCronSchedule("0 0/2 * 1/1 * ? *")
             .Build();

Scheduler.ScheduleJob(firstJob, firstTrigger);
Scheduler.ScheduleJob(secondJob, secondTrigger);

但是当我尝试开始或停止时,所有的工作都开始了,所有的工作都停止了:

Scheduler.Start();
Scheduler.Stop();
c# asp.net-mvc quartz-scheduler quartz.net quartz
1个回答
0
投票

方法 1:在配置中添加 misfire 策略。这将自动启动无法正常完成的作业。见这个。只有当您使用基于数据库的作业存储(例如,JDBC Jobstore)时才会发生这种情况。RAM 作业存储不会发生这种情况。更好的是使用 JDBC 作业存储。

方法 2:不是启动和停止整个调度程序,而是启动特定作业/停止特定作业。您可以使用唯一的作业名称来执行此操作。

最后在调用slow API的地方添加等待几秒响应的逻辑。通过这样做,作业不会因为超时异常而突然结束。

© www.soinside.com 2019 - 2024. All rights reserved.