[英]Java Job Scheduling: Is this possible with Quartz, if not what are my alternatives?
我需要安排一些定期工作,而我遇到了Quartz的障碍。
例如:
我认为使用Quartz(具有单个表达式/作业)是不可能的:
如果是在8:00和12:00之间,那很容易,但是我找不到安排它的方法,只能用单独的表达式处理8:30-9:00和12:00-12:45,我不这样做想要。
我认为这与Quartz无关紧要吗? 我还搜索了一些替代方法,但是大多数替代方法似乎都具有类似的cron语法,而且我不确定它们是否也可以处理。
在这种情况下,我可以使用更细粒度的调度库吗?
正如您所暗示的,我不确定您可以执行此操作。 似乎可以创建一个自定义触发器来执行此操作,但是随后就需要进行大量工作。 另一个选择是按天而不是时间划分双重触发器。
public class TestQuartz {
class ActualJob implements Job {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
}
}
class DailyJob implements Job {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
// Run from now (8:45) every 5 minutes until 12:45 (endDate)
Trigger trigger =
newTrigger()
.startNow()
.endAt(endDate) // 12:45 PM TODAY
.withSchedule(
cronSchedule("0 0/5 * 1/1 * ? *"))
.build();
try {
Scheduler sched = context.getScheduler();
sched.scheduleJob(newJob(ActualJob.class).build(), trigger);
} catch (SchedulerException ex) {
throw new JobExecutionException(ex);
}
}
}
@Test
public void testQuartz() throws SchedulerException {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
// Run once a day starting at 8:45 AM
Trigger dailyTrigger =
newTrigger().withSchedule(cronSchedule("0 45 8 1/1 * ? *")).build();
JobDetail job = newJob(DailyJob.class).build();
sched.scheduleJob(job, dailyTrigger);
}
}
使用Quartz和单个触发器完全可以做到这一点。 人们通常将重点放在Cron触发器上,但是Quartz支持其他触发器类型,它们通常更适合。 为了实现您的调度方案,建议您查看Quartz DailyTimeIntervalTrigger 。
在下面的屏幕截图中,您可以看到DailyTimeIntervalTrigger示例,其中包含用于覆盖用例的属性值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.