Java Quartz@DisallowConcurrentExecution注释似乎不起作用

Java Quartz@DisallowConcurrentExecution注释似乎不起作用,java,quartz-scheduler,Java,Quartz Scheduler,我有一个Quartz作业,设置为定期运行。但是,我希望防止同时执行此作业。我向表示此作业的类添加了@DisallowConcurrentExecution注释,但这似乎没有任何效果 下面是我如何创建作业和触发器以存储到JDBC存储中。触发器设置为每5秒运行一次 JobKey jobKey = new JobKey("sample_job", "default_group"); String triggerIdentity = jobKey.getName() + "_trigge

我有一个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();
下面是我创建的示例job类。它基本上会启动一个计时器,在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

原来我对这个问题想得太多了。计时器似乎是从一个单独的线程中运行的。就工作而言,它是在计时器完成之前完成的。一个简单的线程。睡眠(10000)代替计时器完成了这个任务