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 表达式的用途。