.net - 仅针对特定计数重复 Quartz 作业
问题描述
我需要在特定工作日的特定时间触发工作。这些工作日也是动态的,应该从 db 中获取。此外,作业应该触发或重复特定计数。假设作业 j 应该在每个星期一、星期三、星期五触发,重复计数 15 即 3 * 5 = 15,因此它应该在接下来的 3 周内触发。
我尝试使用下面的 cronexpression,但找不到如何在特定计数后阻止作业触发。
StringBuilder cronString = new StringBuilder("0 0 12 ? * ");
if (plandata.Sunday == true)
cronString.Append("SUN,");
if (plandata.Monday == true)
cronString.Append("MON,");
if (plandata.Tuesday == true)
cronString.Append("TUE,");
if (plandata.Wednesday == true)
cronString.Append("WED,");
if (plandata.Thursday == true)
cronString.Append("THU");
if (plandata.Friday == true)
cronString.Append("FRI,");
if (plandata.Saturday == true)
cronString.Append("SAT,");
cronString.Append(" *");
IJobDetail job = JobBuilder.Create<Demo>()
.Build();
ITrigger trigger = TriggerBuilder.Create()
//.StartAt((DateTime)plandata.StartDate)
.StartNow()
.WithPriority(1)
.WithCronSchedule(cronString.ToString())
.Build();
请给我一些建议,以便我可以实现我所需要的。
解决方案
您可以使用 ISimpleTrigger 为每一天创建简单触发器。您不需要为此工作使用任何 cron 触发器。首先,你应该得到一个匹配的日期。
DateTime today = DateTime.Today;
// The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
DateTime nextMonday = today.AddDays(daysUntilMonday);
或者
DateTime today = DateTime.Today;
// The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
int daysUntilWednesday = ((int)DayOfWeek.Wednesday - (int)today.DayOfWeek + 7) % 7;
DateTime nextWednesday = today.AddDays(daysUntilWednesday);
然后你可以像这样创建一个触发器。
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("DEFAULT")
.StartAt(nextMonday) // or .StartAt(nextWednesday)
.WithSimpleSchedule(x => x
.WithIntervalInHours(168) // 1 week = 168h
.WithRepeatCount(3)) // Repeat on 3 weeks
.Build();
这个简单的触发器将在完成重复后自动删除。
有关更多详细信息 - https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/simpletriggers.html
推荐阅读
- excel - 如何将客户支出分为低、中、高三个范围。每个范围的值应该是多少?
- android - 最后位置不调用 RecyclerView.Adapter 的 onBindViewHolder()
- android-studio - Android中的TextWatcher没有在其他edittexts中设置值
- pycharm - 如何将新编写的函数导入pychaarm中的笔记本?
- webpack - 带变量的动态导入不起作用
- c# - 卡在 UDP 响应
- asp.net - HTTP 500.19 - 内部服务器错误。没有任何配置错误
- gitlab - Gitlab:出现了一个runner系统故障
- azure - Azure 数据工厂 webhook 执行超时而不是中继错误
- c# - CSS 选择器。选择具有相似名称的两个类之一