当分别设置两个trigger的startTime为同一时间点,首次执行时优先级低的可能会先被触发

来源:10-9 Trigger的优先级

msidolphin

2019-09-15

首次执行时优先级低的可能会先被触发,之后会按照优先级的从高到低执行
是否是因为虽然设置了相同的触发时间点,但是两个trigger并没有同时触发?那么如何避免这种问题呢?

import com.msidolphin.job.MyJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Date;

public class QuartzApp {
    public static void main( String[] args ) throws SchedulerException, InterruptedException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
        Date startTime = DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND);
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("jobDetail", "group1")
                .build();
        JobDetail jobDetail2 = JobBuilder.newJob(MyJob.class)
                .withIdentity("jobDetail2", "group2")
                .build();
        Trigger trigger1 = TriggerBuilder.newTrigger()
                .startAt(startTime)
                .withPriority(1)
                .usingJobData("msg", "我是trigger1触发的")
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
                .build();
        Trigger trigger2 = TriggerBuilder.newTrigger()
                .startAt(startTime)
                .withPriority(9)
                .usingJobData("msg", "我是trigger2触发的")
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
                .build();
        scheduler.scheduleJob(jobDetail, trigger1);
        scheduler.scheduleJob(jobDetail2, trigger2);
        Thread.sleep(60 * 1000);
        scheduler.shutdown();
    }
}
写回答

1回答

凌波微步

2019-09-18

可能是由于scheduleJob方法 分开执行的原因,可以考虑一次性注册两个任务。

Map<JobDetail, Set<? extends Trigger>> map = new HashMap<>();
Set<Trigger> set1 = new HashSet<>();
set1.add(trigger1);
Set<Trigger> set2 = new HashSet<>();
set1.add(trigger2);
map.put(jobDetail,set1);
map.put(jobDetail2,set2);

scheduler.scheduleJobs(map, true);

0
0

Elastic-job + Quartz精讲 实现企业级定时任务

经典电商案例,基础入门+框架整合+Java高级玩法+定时任务实现。

378 学习 · 63 问题

查看课程