Java 石英@DisallowConcurrentExecution不工作

Java 石英@DisallowConcurrentExecution不工作,java,quartz-scheduler,Java,Quartz Scheduler,嗨,我在quartz中有两个作业实例,我不想并行运行,我简化了下面示例中的代码,以显示哪些不符合我的期望 public class QuartzTest { public static void main( String[] args ) throws SchedulerException { SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory

嗨,我在quartz中有两个作业实例,我不想并行运行,我简化了下面示例中的代码,以显示哪些不符合我的期望

public class QuartzTest {

public static void main( String[] args ) throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();

JobDetail job1 = newJob( TestJob.class ).withIdentity( "job1", "group1" ).build();
CronTrigger trigger1 = newTrigger().withIdentity( "trigger1", "group1" ).startAt( new Date() ).withSchedule( cronSchedule( getCronExpression( 1 ) ) ).build();
scheduler.scheduleJob( job1, trigger1 );

JobDetail job2 = newJob( TestJob.class ).withIdentity( "job2", "group1" ).build();
CronTrigger trigger2 = newTrigger().withIdentity( "trigger2", "group1" ).startAt( new Date() ).withSchedule( cronSchedule( getCronExpression( 1 ) ) ).build();
scheduler.scheduleJob( job2, trigger2 );

for ( int i = 0; i < 5; i++ ) {
    System.out.println( trigger1.getNextFireTime() );
    System.out.println( trigger2.getNextFireTime() );
    try {
    Thread.sleep( 1 * 60 * 1000 );
    } catch ( InterruptedException e ) {
    e.printStackTrace();
    }
}
}

private static String getCronExpression( int interval ) {
return "0 */" + interval + " * * * ?";

}

}
因此,我在这里计划每分钟运行两个作业(在实际情况中,一个每分钟运行一次,另一个每5分钟运行一次),这是我得到的输出:

Job started
Job sleeping 30s...
Job started
Job sleeping 30s...
Job finished.
Job finished.
所以这两个作业都是并行运行的,因为job1在运行之前等待job2完成的顺序会给出这个顺序

Job started
Job sleeping 30s...
Job finished.
Job started
Job sleeping 30s...
Job finished.
那么为什么不发生这种情况呢?

来自文档:

@不允许继续执行:

将作业类标记为不能同时执行多个实例的注释(其中实例基于JobDetail定义,或者换句话说,基于JobKey)

JobKey由名称和组组成

在您的示例中,名称不同,因此这是两个不同的作业

DisallowConcurrentExecution是指确保在触发另一个job1#thread2之前完成job1#thread1

Job started
Job sleeping 30s...
Job finished.
Job started
Job sleeping 30s...
Job finished.