时间之间的Java Quartz调度程序

时间:2018-10-10 06:16:27

标签: java quartz-scheduler

我有一份工作,我想每天在特定时间(例如,上午8点至上午10点,间隔5分钟)开始使用石英调度程序(v2.1.5),不使用cron表达式,而仅使用本地方法。 (通过本机方法,我知道可以在该石英库中实现)。 我有扳机:

await HttpContext.GetTokenAsync("Spotify", "access_token");

当然,cron表达剂量很难,我可以改用它。但是无论如何,我只是会知道在该问题中使用本机方法是否可行。乐于接受任何建议!

2 个答案:

答案 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表达式的目的。