Java 时间之间的石英调度器
Java Quartz-scheduler between time
我有一份工作,我想在每天的特定时间(例如,上午 8 点至上午 10 点,间隔 5 分钟)开始使用石英调度程序 (v2.1.5),而不使用 cron 表达式,仅使用本机方法。 (通过我理解的在该石英库中实现的本地方法)。
我有触发器:
TriggerBuilder builder = TriggerBuilder.newTrigger()
.withIdentity(name, group)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(interval)
.repeatForever());
当然cron expression dosent make difficult,我可以改用它。但无论如何,我只是想知道是否可以在该问题中使用本机方法。很高兴收到任何建议!
这是来自 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();
诀窍是有一个简单的触发器(如上所示),然后有一个日历实现可以指定允许执行该触发器的时间。
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 表达式的用途。
我有一份工作,我想在每天的特定时间(例如,上午 8 点至上午 10 点,间隔 5 分钟)开始使用石英调度程序 (v2.1.5),而不使用 cron 表达式,仅使用本机方法。 (通过我理解的在该石英库中实现的本地方法)。 我有触发器:
TriggerBuilder builder = TriggerBuilder.newTrigger()
.withIdentity(name, group)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(interval)
.repeatForever());
当然cron expression dosent make difficult,我可以改用它。但无论如何,我只是想知道是否可以在该问题中使用本机方法。很高兴收到任何建议!
这是来自 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();
诀窍是有一个简单的触发器(如上所示),然后有一个日历实现可以指定允许执行该触发器的时间。
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 表达式的用途。