Java 石英@DisallowConcurrentExecution不工作
嗨,我在quartz中有两个作业实例,我不想并行运行,我简化了下面示例中的代码,以显示哪些不符合我的期望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
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.