Quartz vetoJobExecution nur einmal aufgerufen

OnDemand

Top Contributor
Moin zusammen,

folgendes Szenario:

Job A läuft (mit@DisallowConcurrentExecution). Ich habe einen TriggerListener registriert am Scheduler, welcher die vetoJobExecution ausführt.
Die Methode wird aufgerufen, dann läuft der Job (sagen wir er läuft eine Stunde) während dessen wird er aber getriggered, nochmal zu laufen also sollte doch eigentlich bei jedem Versuch die vetoJobExecution Methode aufgerufen werden um prüfen zu können, ob aktuell ein Job vom Typ XY läuft oder nicht. Die Methode wird aber nur einmal aufgerufen und "false" zurück gegeben, weil zum Zeitpunkt eben noch kein Job läuft.

Hat jemand ne Idee warum in die Methode nicht jedesmal reingegangen wird, wenn der Job nochmal gefeuert wird? Sieht aus als würde der Trigger komplett pausiert und es wird nicht wieder versucht den Job zu feuern.

Java:
 @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext jobExecutionContext) {
        ImportScheduler importScheduler = SpringContext.getBean(ImportScheduler.class);
        List<JobDetail> currentJobs = importScheduler.getCurrentlyRunningJobs();
        for (JobDetail jobDetail : currentJobs) {
            String thisJobName = jobDetail.getKey().getName();
            if (thisJobName.equalsIgnoreCase(jobExecutionContext.getJobDetail().getKey().getName())){
                return true;
            }
        }
        return false;
    }
 

OnDemand

Top Contributor
Was mir noch komisch vorkommt:
Job läuft 1,25 Stunden, während dessen beginnt kein neuer Job (trigger löst jede Stunde aus). Sobald der erste Job aber fertig ist, beginnt sofort ein weiterer, als wäre er in einer Warteschlange gestanden.

Ist in meinem CronTrigger was nicht iO?

Java:
 String cron = "0 0/" + importJob.getIntervall() + " * * * ?";
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity(inventoryLocation.getNameShort(), "import")
                .startNow()
                .withSchedule(cronSchedule(cron).withMisfireHandlingInstructionDoNothing())
                .build();
        return trigger;

Laut google sollte man in dem Fall withMisfireHandlingInstructionNextWithRemainingCount() nutzen, aber die Methode gibts bei mir nicht. https://stackoverflow.com/questions...is-still-running-and-wait-for-the-next-schedu

Bin auf der letzten Quartzversion 2.3.2 🧐
 

Ähnliche Java Themen

Neue Themen


Oben