我有一份工作,我想每天在特定时间(例如,上午8点至上午10点,间隔5分钟)开始使用石英调度程序(v2.1.5),不使用cron表达式,而仅使用本地方法。 (通过本机方法,我知道可以在该石英库中实现)。 我有扳机:
await HttpContext.GetTokenAsync("Spotify", "access_token");
当然,cron表达剂量很难,我可以改用它。但是无论如何,我只是会知道在该问题中使用本机方法是否可行。乐于接受任何建议!
答案 0 :(得分:2)
以下是Quartz tutorial中的一个示例(稍作修改):
var cal = new DailyCalendar(8, 0, 0, 0, 10, 0, 0, 0); // range start and end hours, minutes, seconds and millis
cal.setInvertTimerange(true); // by default the date interval specified above is excluded from execution.
// This turns it around and only allows execution within the interval
var t2 = TriggerBuilder.newTrigger()
.withIdentity("myTrigger2")
.forJob("myJob2")
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(interval)
.repeatForever());
.modifiedByCalendar(cal)
.build();
诀窍是要有一个简单的触发器(如上所示),然后有一个日历实现,可以指定允许执行该触发器的时间。
答案 1 :(得分:1)
API方法涵盖几种简单的场景(每个X,在X处)和不太简单的场景(A,B,C的天在X,每月的X处),但是您的方法还不止于此。
您可以尝试执行以下操作,以安排每5分钟运行一次,即上午8点至上午10点:
Trigger trigger = TriggerBuilder.newTrigger() // identity, job, etc.
.withSchedule(simpleSchedule()
.withIntervalInMinutes(5)
.repeatForever())
.startAt(DateBuilder.tomorrowAt(8,0,0))
.endAt(DateBuilder.tomorrowAt(10,0,0))
.build();
然后在工作中加入一些逻辑,以便在完成工作后以相同的方式将自己安排到第二天。 另外,您可以安排它永久每5分钟运行一次,并在执行任何操作之前检查作业是否在上午8点到上午10点之间。
或者您可以使用,您知道... cron表达式:
Trigger trigger = TriggerBuilder.newTrigger() // identity, job, etc.
.withSchedule(cronSchedule("0 0/5 8-10 * * ? *"))
.startAt(DateBuilder.evenMinuteDateAfterNow())
.build();
这正是您想要的-这就是cron表达式的目的。