Quartz啟動后第一次會立即執行問題解決辦法


通過quartz配置一個任務,比如我設定每小時(整點)執行一次,比如15:28啟動,預想結果應該是,在16:00第一次執行,然后類推。結果經常是,15:28就進行了第一次執行,也就是說quartz在啟動時不按照預定排程執行了一次。這在實際操作中會帶來不小的麻煩。

解決辦法:((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;

_scheduler = await GetSchedulerAsync();
Type type = Type.GetType(scheduleInfo.JobName, true, true);
IJobDetail job = JobBuilder.Create(type)
                            .WithIdentity(scheduleInfo.JobName, scheduleInfo.JobGroup)
                            .Build();
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                            .StartAt(startRunTime)
                            .EndAt(endRunTime)
                            .WithIdentity(scheduleInfo.JobName, scheduleInfo.JobGroup)
                            .WithCronSchedule(scheduleInfo.CronExpress)
                            .Build();
((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
IList<ICronTrigger> triggers = new List<ICronTrigger> { trigger };
await _scheduler.ScheduleJob(job, new ReadOnlyCollection<ICronTrigger>(triggers), true);
if (!_scheduler.IsStarted) await _scheduler.Start();

另外:下面一句如果存在相同名字的Job或Trigger參數replace設置為true可以更新作業的調度計划(如Cron重設)而不報錯.
await _scheduler.ScheduleJob(job, new ReadOnlyCollection<ICronTrigger>(triggers), true);

await _scheduler.ScheduleJob(job, new ReadOnlyCollection<ICronTrigger>(triggers), true);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM