如何在java中使用crone表达式立即运行crone Trigger?

时间:2017-03-02 06:14:12

标签: quartz-scheduler

下面是我的代码,我想通过crone表达每十分钟运行一次我的工作。 我希望我的工作第一次立即运行,之后它应该以10分钟的间隔运行。我正在使用quartz-2.1.2

JobKey jobKeyA = new JobKey("abc", "abc");

JobDetail jobA = JobBuilder.newJob(ContiniousJob.class)
        .withIdentity(jobKeyA).build();

Trigger trigger3 = TriggerBuilder
        .newTrigger()
        .withIdentity("abc", "abc")
        .startNow()
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0/10  * * * ?"))
        .build();

感谢。

2 个答案:

答案 0 :(得分:1)

如果您只想要10分钟间隔,则不需要CronTrigger,您只需使用SimpleTrigger:

Trigger trigger3 = TriggerBuilder
        .newTrigger()
        .withIdentity("abc", "abc")
        .startNow()
        .withSchedule(simpleSchedule()
            .withIntervalInMinutes(10)
            .repeatForever())
        .build();

如果仍然因任何原因需要使用CronTrigger,这应该可行:

// Trigger to run immediately
Trigger trigger = TriggerBuilder.newTrigger()
            .withIdentity("abc", "abc")
            .startNow()
            .build(); 
Set<Trigger> triggers = new HashSet<>();
triggers.add(trigger);

// Your CronTrigger
Date delayedStart = DateUtils.addMinutes(new Date(), 10); 
Trigger cronTrigger = TriggerBuilder
        .newTrigger()
        .withIdentity("abc", "abc")
        .startAt(delayedStart)
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0/10  * * * ?"))
        .build();

triggers.add(cronTrigger);

// Schedule job with multiple triggers
scheduler.scheduleJob(job, triggers, false);

立即运行一个触发器,另一个触发器成为您的CronTrigger。

答案 1 :(得分:0)

不幸的是,没有机会立即解雇cron。
我建议在需要启动一段短暂的延迟时间(当前时间+ 1分钟)后立即安排任务。
尝试测试您的表达式here