Java Quartz计划作业-不允许并发执行作业

Java Quartz计划作业-不允许并发执行作业,java,jakarta-ee,quartz-scheduler,Java,Jakarta Ee,Quartz Scheduler,我使用Quartz作业执行特定任务 我还在我的主应用程序类中安排它的执行,我试图完成的是不允许同时执行此作业的实例 因此,调度器只应在其上一个实例完成时执行作业 这是我的职业课: public class MainJob implements Job { static Logger log = Logger.getLogger(MainJob.class.getName()); @Override public void execute(JobExecutionContext arg0) t

我使用Quartz作业执行特定任务

我还在我的主应用程序类中安排它的执行,我试图完成的是不允许同时执行此作业的实例

因此,调度器只应在其上一个实例完成时执行作业

这是我的职业课:

public class MainJob implements Job {

static Logger log = Logger.getLogger(MainJob.class.getName());

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {

    GlobalConfig cfg = new GlobalConfig();

    ProcessDicomFiles processDicomFiles = new ProcessDicomFiles();  
    ProcessPdfReportFiles processPdf = new ProcessPdfReportFiles();

    try {

            log.info("1. ---- SCHEDULED JOB -- setStudiesReadyToProcess");
            processDicomFiles.setStudiesReadyToProcess();

            log.info("2. ---- SCHEDULED JOB --- distributeToStudies");
            processDicomFiles.distributeToStudies(cfg.getAssocDir());                

            ...

            //process any incoming PDF file
            log.info("11. ---- SCHEDULED JOB --- processPdfFolder");
            processPdf.processPdfFolder();

        } catch (Exception ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.ERROR, null, ex);
        }

    log.info(">>>>>>>>>>> Scheduled Job has ended .... <<<<<<<<<<<<<<<<<<<<");

    }
}

如果另一个主作业实例仍在运行,我想阻止调度程序启动第二个主作业实例…

只需在作业类顶部使用
@DisallowConcurrentExecution
注释即可


参阅此官方或关于并发执行的说明。

< p>您可以实现或注释

<代码> @ DasuleCurrurtRealths< /Cord>可以完成您的工作,但请考虑它只会阻止您的类在同一个节点上运行两次。

请参见州中的@ReneM comment(不知道是不是2015年5月)。禁止ConcurrentExecution和/或PersistJobDataAfterExecution是一种方法。
...
//start Scheduler
    try {             
        startScheduler();
    } catch (SchedulerException ex) {
        log.log(Level.INFO, null, ex);
    }
...

public void startScheduler () throws SchedulerException {

        //Creating scheduler factory and scheduler
        factory = new StdSchedulerFactory();
        scheduler = factory.getScheduler();

        schedulerTimeWindow = config.getSchedulerTimeWindow();

        JobDetailImpl jobDetail = new JobDetailImpl();
        jobDetail.setName("First Job");
        jobDetail.setJobClass(MainJob.class);

        SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
        simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
        simpleTrigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
        simpleTrigger.setRepeatInterval(schedulerTimeWindow);
        simpleTrigger.setName("FirstTrigger");

        //Start scheduler
        scheduler.start();
        scheduler.scheduleJob(jobDetail,simpleTrigger);

}