繁体   English   中英

石英防止工作重叠

[英]Quartz prevent jobs overlap

我是Quartz 2.1的新手,对此有疑问。 我有一个工作如下

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class HelloJob implements Job {

    public void execute(JobExecutionContext arg0) throws JobExecutionException {

我创建了两个工作,如下所示

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("Job1").build();
JobDetail jobDetail2 = JobBuilder.newJob(HelloJob.class).withIdentity("Job2").storeDurably().build();
Trigger trigger = TriggerBuilder.newTrigger().forJob(jobDetail).withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(5).repeatForever()).build();
Trigger trigger2 = TriggerBuilder.newTrigger().forJob(jobDetail2).withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(10).repeatForever()).build();
        SchedulerFactory factory = new StdSchedulerFactory("quartz.properties");
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.scheduleJob(jobDetail2, trigger2);

如您所见,job1每5秒执行一次,job2每10秒执行一次。 我想要的是,如果job1完成超过10秒,则job2将执行到job1完成。 但实际上,job2仍在执行,而job1未完成。 请你帮助我好吗?

P/s: this is the quartz.properties:
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
  1. 如果使用同一作业,则只需要一个JobDetail实例(而不是两个)。
  2. 致电storeDurably给您JobDetail。
  3. 为trigger和trigger2设置相同的jobDetail
  4. 将作业安排如下:

     scheduler.start(); scheduler.addJob(jobDetail, true); scheduler.scheduleJob(trigger); scheduler.scheduleJob(trigger2); 

您代码的其他部分很好。

暂无
暂无

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

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