0
我有一个Quartz作业被设置为每隔一段时间运行一次。不过,我想阻止这项工作的并发执行。我将@DisallowConcurrentExecution注释添加到表示此作业的类中,但似乎没有任何作用。Quartz @DisallowConcurrentExecution注解似乎没有工作
以下是我创建作业并触发存储到JDBC存储区的方法。触发器设置为每5秒运行一次。
JobKey jobKey = new JobKey("sample_job", "default_group");
String triggerIdentity = jobKey.getName() + "_trigger";
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
if (!scheduler.checkExists(jobKey)) {
JobDetail jobDetail = JobBuilder.newJob(SampleJob.class).withIdentity(jobKey).build();
Trigger trigger = newTrigger()
.withIdentity(triggerIdentity, jobKey.getGroup())
.startAt(new Date())
.withSchedule(simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
scheduler.start();
这是我创建的示例作业类。它基本上启动了一个计时器,它在10秒内完成并打印一条消息。
@DisallowConcurrentExecution
public class SampleJob implements Job {
public SampleJob() {
}
@Override
public void execute(JobExecutionContext jobExcutionContext) {
final Date now = new Date();
System.out.println("Starting sample job: " + now);
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Done: " + now);
this.cancel();
}
}, 10000L);
}
}
当我运行此我看到下面的输出,这对我来说意味着作业触发,即使以前的执行尚未完成,每5秒关机。我误解了@DisallowConcurrentExecution的含义,还是我的测试不正确?
Starting sample job: Sat Apr 04 22:45:06 EDT 2015
Starting sample job: Sat Apr 04 22:45:11 EDT 2015
Done: Sat Apr 04 22:45:01 EDT 2015
Starting sample job: Sat Apr 04 22:45:16 EDT 2015
Done: Sat Apr 04 22:45:06 EDT 2015
Starting sample job: Sat Apr 04 22:45:21 EDT 2015
Done: Sat Apr 04 22:45:11 EDT 2015
Done: Sat Apr 04 22:45:16 EDT 2015
Starting sample job: Sat Apr 04 22:45:26 EDT 2015
Starting sample job: Sat Apr 04 22:45:31 EDT 2015
Done: Sat Apr 04 22:45:21 EDT 2015