繁体   English   中英

Java Job Scheduling:如果没有,我可以用Quartz实现吗?

[英]Java Job Scheduling: Is this possible with Quartz, if not what are my alternatives?

我需要安排一些定期工作,而我遇到了Quartz的障碍。

例如:

我认为使用Quartz(具有单个表达式/作业)是不可能的:

  • 每天在8:30到12:45之间运行一份工作,为期五分钟。 例如8:30、8:35、8:40,.... 12:40、12:45。

如果是在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示例,其中包含用于覆盖用例的属性值。

DailyTimeIntervalTrigger示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM